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?

Author: Ortomala Lokni, 2011-07-14

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.

 79
Author: Bohemian,
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.
 19
Author: Ortomala Lokni,
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.

 4
Author: Basil Bourque,
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;
        }
 0
Author: user1960808,
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