Mam datę wewnątrz łańcucha, coś w rodzaju „12-grudzień-2012”. Jak mogę zamienić to na milisekundy (długie)?
źródło
Mam datę wewnątrz łańcucha, coś w rodzaju „12-grudzień-2012”. Jak mogę zamienić to na milisekundy (długie)?
Korzystanie z SimpleDateFormat
String string_date = "12-December-2012";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
Date d = f.parse(string_date);
long milliseconds = d.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Najwyższy czas, aby ktoś udzielił nowoczesnej odpowiedzi na to pytanie. W 2012 roku, kiedy zadawano to pytanie, odpowiedzi zamieszczone wówczas również były dobre. Dlaczego w odpowiedziach opublikowanych w 2016 r. Wykorzystano również dawno przestarzałe zajęcia SimpleDateFormat
i Date
jest to dla mnie nieco bardziej tajemnicze. java.time
, nowoczesny interfejs API daty i czasu Javy, znany również jako JSR-310, jest o wiele przyjemniejszy w obsłudze. Możesz go używać na Androidzie za pośrednictwem ThreeTenABP, zobacz to pytanie: Jak używać ThreeTenABP w Android Project .
Do większości celów zalecam używanie milisekund od początku dnia w czasie UTC . Aby je uzyskać:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
String stringDate = "12-December-2012";
long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
System.out.println(millisecondsSinceEpoch);
To drukuje:
1355270400000
Jeśli potrzebujesz godziny na początku dnia w określonej strefie czasowej, określ tę strefę zamiast czasu UTC, na przykład:
.atStartOfDay(ZoneId.of("Asia/Karachi"))
Zgodnie z oczekiwaniami daje to nieco inny wynik:
1355252400000
Kolejna kwestia, na którą należy zwrócić uwagę, pamiętaj o podaniu ustawień regionalnych do swojego DateTimeFormatter
. Uznałem, że grudzień był angielski, są inne języki, w których ten miesiąc nazywa się tym samym, więc proszę samemu wybrać odpowiednią lokalizację. Jeśli nie podasz ustawień regionalnych, program formatujący użyje ustawień regionalnych maszyny JVM, które mogą działać w wielu przypadkach, a następnie pewnego dnia niespodziewanie zakończy się niepowodzeniem, gdy uruchomisz aplikację na urządzeniu z innymi ustawieniami regionalnymi.
Przyjrzyj się SimpleDateFormat
klasie, która może analizować a String
i zwracać a Date
oraz getTime
metodę Date
class.
java.util.Date
użycie programu formatującego datęNajłatwiej jest użyć Date Using Date () i getTime ()
Date dte=new Date();
long milliSeconds = dte.getTime();
String strLong = Long.toString(milliSeconds);
System.out.println(milliSeconds)
używając uproszczonego formatu możesz to łatwo osiągnąć.
1) Najpierw przekonwertuj ciąg na java.Date przy użyciu simpledateformatter.
2) Użyj metody getTime, aby uzyskać liczbę milisekund od daty
public class test {
public static void main(String[] args) {
String currentDate = "01-March-2016";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
Date parseDate = f.parse(currentDate);
long milliseconds = parseDate.getTime();
}
}
więcej Przykład kliknij tutaj
Wypróbuj poniższy kod
SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
Date d = null;
try {
d = f.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long timeInMillis = d.getTime();