tl; dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
java.time
Nowa platforma java.time wbudowana w Javę 8 i późniejszą jest następcą Joda-Time.
Te nowe klasy obejmują przydatną fabryczną metodę konwersji liczby sekund z epoki. Dostajesz Instant
chwilę na osi czasu w UTC z rozdzielczością do nanosekund.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString (): 2010-07-30T18: 00: 00Z
Zobacz, jak kod działa na żywo w IdeOne.com .
Asia/Kabul
czy Asia/Tehran
strefy czasowe?
Zgłosiłeś, że otrzymałeś wartość dnia 22:30 zamiast 18:00 tutaj. Podejrzewam, że twoje narzędzie PHP domyślnie stosuje domyślną strefę czasową do dostosowania z UTC. Moja wartość tutaj to UTC, oznaczony przez Z
(skrót Zulu
oznacza UTC). Jest jakaś szansa, urządzenie OS lub PHP jest ustawiony Asia/Kabul
lub Asia/Tehran
strefy czasowe? Podejrzewam, że tak, jak informujesz IRST
w swoich pracach, co najwyraźniej oznacza czas Iranu. Obecnie w 2017 r. Są to jedyne strefy działające w okresie letnim, który jest o cztery i pół godziny przed UTC.
Określ prawidłową nazwę strefy czasowej w formacie continent/region
, takie jak America/Montreal
, Africa/Casablanca
lub Pacific/Auckland
. Nigdy nie używać skrótu 3-4 siÄ takich jak EST
lub IST
czy IRST
są one nie prawdziwe strefy czasowe, niestandardowe, a nawet unikatowe (!).
Jeśli chcesz zobaczyć swoją chwilę przez soczewkę strefy czasowej określonego regionu, zastosuj a, ZoneId
aby uzyskać ZonedDateTime
. Wciąż ten sam jednoczesny moment, ale postrzegany jako inny czas naścienny .
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22: 30 + 04: 30 [Asia / Teheran]
Konwersja z java.time na starsze klasy
Powinieneś trzymać się nowych klas java.time. Ale w razie potrzeby możesz zmienić na stary.
java.util.Date date = java.util.Date.from( instant );
Joda-Time
AKTUALIZACJA: Projekt Joda-Time jest teraz w trybie konserwacji , a zespół doradza migrację do klas java.time .
Do Twojej wiadomości, konstruktor JTA-Time DateTime jest podobny: pomnóż przez tysiąc, aby utworzyć long
(nie an int
!).
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
Najlepiej, aby uniknąć kłopotliwych klas java.util.Date i .Calendar. Ale jeśli musisz użyć Daty, możesz dokonać konwersji z Joda-Time.
java.util.Date date = dateTime.toDate();
O java.time
Środowisko java.time jest wbudowane w Javę 8 i nowsze wersje . Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak java.util.Date
, Calendar
, i SimpleDateFormat
.
Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do klas java.time .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie potrzeba ciągów, nie ma potrzeby java.sql.*
klas.
Gdzie można uzyskać klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak Interval
, YearWeek
, YearQuarter
, i więcej .