Konwertuj format daty w epoch
Mam ciąg znaków o formacie daty np.
Jun 13 2003 23:11:52.454 UTC
Zawierający milisekundy... które chcę przekształcić w epoce. Czy istnieje narzędzie w Javie, którego mogę użyć do tej konwersji?
4 answers
Ten kod pokazuje jak używać Javy.tekst.SimpleDateFormat to parse a java.util.Date from a String:
String str = "Jun 13 2003 23:11:52.454 UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz");
Date date = df.parse(str);
long epoch = date.getTime();
System.out.println(epoch); // 1055545912454
Date.getTime()
zwraca czas epoki w milisekundach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 18:54:57
Możesz również użyć nowego API Java 8
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class StackoverflowTest{
public static void main(String args[]){
String strDate = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss.SSS zzz");
ZonedDateTime zdt = ZonedDateTime.parse(strDate,dtf);
System.out.println(zdt.toInstant().toEpochMilli()); // 1055545912454
}
}
The DateTimeFormatter
klasa zastępuje stary SimpleDateFormat
. Następnie można utworzyć ZonedDateTime
z którego można wyodrębnić żądany czas epoki.
Główną zaletą jest to, że jesteś teraz bezpieczny.
Dzięki Basilowi Bourque ' owi za uwagi i sugestie. Przeczytaj jego odpowiedź, aby uzyskać szczegółowe informacje.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 09:53:55
Tl;dr
ZonedDateTime.parse(
"Jun 13 2003 23:11:52.454 UTC" ,
DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" )
)
.toInstant()
.toEpochMilli()
1055545912454
Java.CZAS
Ta odpowiedź rozszerza się na odpowiedź Lockni .
DateTimeFormatter
Najpierw zdefiniuj wzorzec formatowania, aby pasował do twojego ciągu wejściowego, tworząc DateTimeFormatter
obiekt.
String input = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" );
ZonedDateTime
Parse the string as a ZonedDateTime
. Można myśleć o tej klasie jako: ( Instant
+ ZoneId
).
ZonedDateTime zdt = ZonedDateTime.parse ( "Jun 13 2003 23:11:52.454 UTC" , f );
Zdt.toString(): 2003-06-13T23: 11: 52.454 Z[UTC]
Count-from-epoch
Nie polecam śledzenia wartości daty i czasu jako count-from-epoch. Powoduje to, że debugowanie jest trudne, ponieważ ludzie nie mogą odróżnić znaczącej daty od liczby, więc nieprawidłowe / nieoczekiwane wartości mogą się wymknąć. Również takie liczby są niejednoznaczne, w ziarnistości (całe sekundy, mili, mikro, nano, itp.) i w epoce (co najmniej dwa tuziny w różnych systemach komputerowych).Ale jeśli nalegasz, możesz dostać liczba milisekund od epoki pierwszej chwili 1970 roku w UTC (1970-01-01T00:00:00
) poprzez Instant
klasy. Należy pamiętać, że oznacza to utratę danych, ponieważ skracasz wszelkie nanosekundy do milisekund.
Instant instant = zdt.toInstant ();
Natychmiast.toString (): 2003-06-13t23:11:52.454 z
long millisSinceEpoch = instant.toEpochMilli() ;
1055545912454
O Javie.CZAS
Java.Framework time jest wbudowany w Javę 8 i nowszą. Klasy te zastępują kłopotliwą starą datę klasy takie jak java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Projekt Joda-Time, obecnie w trybie konserwacji , radzi migrację do Javy.czas.
Aby dowiedzieć się więcej, Zobacz samouczek Oracle. I wyszukaj przepełnienie stosu dla wielu przykładów i wyjaśnień.Większość Javy.funkcja czasu jest z powrotem przeniesiona do Java 6 & 7 w ThreeTen-Backport i dalej dostosowana doAndroid w ThreeTenABP (zobacz jak używać...).
Projekt ThreeTen-Extra rozszerza Javę.czas z dodatkowymi zajęciami. Ten projekt jest poligonem dla potencjalnych przyszłych dodatków do Javy.czas. Możesz znaleźć tutaj kilka przydatnych klas, takich jak Interval
, YearWeek
, YearQuarter
, i więcej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:37
Utwórz wspólną metodę konwersji ciągu znaków na format daty
public static void main(String[] args) throws Exception {
long test=ConvertStringToDate("May 26 10:41:23","MMM dd hh:mm:ss");
long test2=ConvertStringToDate("Tue, Jun 06 2017, 12:30 AM","EEE, MMM dd yyyy, hh:mm a");
long test3=ConvertStringToDate("Jun 13 2003 23:11:52.454 UTC","MMM dd yyyy HH:mm:ss.SSS zzz");
}
private static long ConvertStringToDate(String dateString,String format)
{
try
{
return new SimpleDateFormat(format).parse(dateString).getTime();
}
catch (ParseException e) {
}
return 0;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-07 06:55:20