Java: date from unix timestamp
Muszę przekonwertować uniksowy znacznik czasu na obiekt date.
Próbowałem tego:
java.util.Date time = new java.util.Date(timeStamp);
Wartość znacznika czasu to: 1280512800
Data powinna być "2010/07/30 - 22:30:00" (jak dostaję to przez PHP) ale zamiast tego dostaję Thu Jan 15 23:11:56 IRST 1970
.
8 answers
Dla 1280512800
, pomnóż przez 1000, ponieważ java oczekuje milisekund:
java.util.Date time=new java.util.Date((long)timeStamp*1000);
Jeśli masz już milisekundy, to po prostu new java.util.Date((long)timeStamp);
Z dokumentacji :
Przydziela obiekt Date i inicjalizuje go do reprezentowania określona liczba milisekund od standardowy czas bazowy znany jako " the epoki", mianowicie 1 stycznia 1970 roku, 00: 00: 00 GMT.
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-11-30 19:30:00
To jest właściwa droga:
Date date = new Date ();
date.setTime((long)unix_time*1000);
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
2011-09-13 15:52:56
Java.czas
Java 8 wprowadziła nowe API do pracy z datami i godzinami: java .pakiet czasowy .
Z Javą.czas, którego możesz użyć:
Date date = Date.from( Instant.ofEpochSecond( timeStamp ) );
An Instant reprezentuje znacznik czasu w Java 8. Za pomocą metody static Date.from()
można przekonwertować instancję Instant
na instancję java.util.Date
.
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
2014-07-11 20:12:32
Wygląda na to, że Kalendarz to nowa droga:
Calendar mydate = Calendar.getInstance();
mydate.setTimeInMillis(timestamp*1000);
out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));
Ostatnia linijka to tylko przykład jak z niej korzystać, Ta wydrukuje np. "14.06.2012".
Jeśli korzystałeś z systemu.currentTimeMillis () aby zapisać Znacznik Czasu, nie potrzebujesz części "*1000".
Jeśli masz znacznik czasu w łańcuchu znaków, musisz najpierw przeanalizować go jako long: Long.parseLong (znacznik czasu).
Https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
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
2015-04-12 15:55:35
Tl;dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
Java.czas
Nowa java.Framework czasu Wbudowany W Java 8 i Później jest następcą Joda-Time.
Te nowe klasy zawierają poręczną metodę fabryczną do konwersji liczby całych sekund z epoki. Otrzymujesz Instant
, moment na osi czasu w UTC z rozdzielczością do nanosekund.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
Natychmiast.toString (): 2010-07-30t18: 00: 00Z
Zobacz że kod działa na żywo w IdeOne.com .
Asia/Kabul
czy Asia/Tehran
strefy czasowe ?
Zgłosiłeś, że czas dnia to 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ść to UTC, oznaczana przez Z
(skrót od Zulu
, oznacza UTC). Jakakolwiek szansa, że Twój system operacyjny lub PHP jest ustawiony na Asia/Kabul
lub Asia/Tehran
strefy czasowe? Przypuszczam, że tak, jak zgłaszasz IRST
w swojej pracy, która najwyraźniej oznacza czas Iranu. Obecnie w 2017 r.są to jedyne strefy działające z czasem letnim, który jest cztery i pół godziny przed UTC.
Określ właściwą nazwę strefy czasowej w formacie continent/region
, np. America/Montreal
, Africa/Casablanca
, lub Pacific/Auckland
. Nigdy nie używaj skrótów 3-4 literowych, takich jak EST
lub IST
lub IRST
, ponieważ są one a nie prawdziwymi strefami czasowymi, nie znormalizowanymi, a nawet unikalnymi(!).
If you want to see your moment przez obiektyw strefy czasowej danego regionu, zastosuj ZoneId
, aby uzyskać ZonedDateTime
. Wciąż ten sam jednoczesny moment, ale postrzegany jako inny zegar ś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 Javy.czas na klasy starsze
Powinieneś trzymać się nowej Javy.zajęcia czasowe. Ale możesz przekonwertować na stary, jeśli jest to wymagane.
java.util.Date date = java.util.Date.from( instant );
Joda-Czas
UPDATE: The Projekt Joda-Time jest obecnie w trybie konserwacji , a zespół doradza migracji do java.czas klasy.
FYI, konstruktor dla Joda-Time DateTime jest podobny: pomnóż przez tysiąc, aby wytworzyć long
(Nie int
!).
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
Najlepiej unikać notorycznie kłopotliwej Javy.util.Data i .Zajęcia z kalendarza. Ale jeśli musisz użyć daty, możesz przekonwertować z Joda-Time.
java.util.Date date = dateTime.toDate();
O java.czas
The java.czas framework jest wbudowany w Java 8 i nowsze. Klasy te zastępują kłopotliwe stare dziedzictwo klasy date-time, takie jak java.util.Date
, Calendar
, & SimpleDateFormat
.
The Joda-czas projekt, obecnie w trybie konserwacji , radzi migrację do java.czas klasy.
Aby dowiedzieć się więcej, Zobacz Oracle Tutorial. I wyszukaj przepełnienie stosu dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymienić Javę.obiekty time bezpośrednio z bazą danych. Użyj sterownika JDBCzgodnego z JDBC 4.2 lub nowszego. Nie ma potrzeby stosowania łańcuchów, nie ma potrzeby stosowania klas java.sql.*
.
Skąd pobrać Javę.zajęcia czasowe?
-
Java SE 8, Java SE 9, oraz później
- Wbudowany.
- część standardowego API Javy z dołączoną implementacją.
- Java 9 dodaje kilka drobnych funkcji i poprawek.
-
Java SE 6 oraz Java SE 7
- Większość Javy.funkcja czasu powraca-przeportowana do Javy 6 i 7 w ThreeTen-Backport.
-
Android
- późniejsze wersje implementacji pakietu Android w Javie.zajęcia czasowe.
- dla wcześniejszego Androida ( ThreeTenABP projekt adaptuje ThreeTen-Backport (wspomniano powyżej). Zobacz też jak stosować ThreeTenABP....
The ThreeTen-Extra projekt 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
2018-04-02 00:28:58
Konstruktor Date oczekuje wartości znacznika czasu w milisekundach. Pomnóż wartość znacznika czasu przez 1000, a następnie prześlij ją do konstruktora.
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
2010-07-30 12:24:58
Jeśli konwertujesz wartość znacznika czasu na innej maszynie, powinieneś również sprawdzić strefę czasową tej maszyny. Na przykład;
Powyższe napisy będą miały różne wartości daty, jeśli uruchomisz je w strefach czasowych EST lub UTC.
Aby ustawić strefę czasową; aka NA UTC, możesz po prostu przepisać;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));
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
2013-09-16 21:47:41
Date d = new Date(i * 1000 + TimeZone.getDefault().getRawOffset());
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
2015-03-19 05:21:29