2011-11-24 15 views

Odpowiedz

1

Sztuką jest użycie java.util.Date i java.text.DateFormat, aby uzyskać żądany format. Możesz sprawdzić, jak to zrobić w tutorials on the Web.

7
long yourSeconds = 1320105600L; 
Date d = new Date(yourSeconds * 1000); 

Tutaj javadoc to opis. Konstruktor potrzebuje milisekund.

Aby wyświetlić tę datę w odpowiednim formacie należy sprawdzić DataFormat

Oto przykład:

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz"); 
System.out.println(df.format(date)); 
23

W przypadku jesteś ograniczony do spuścizny java.util.Date i java.util.Calendar API, trzeba wziąć pod uwagę że znaczniki czasu są interpretowane w milisekundach, a nie w sekundach. Najpierw należy pomnożyć go przez 1000, aby uzyskać znacznik czasu w milisekundach.

long seconds = 1320105600; 
long millis = seconds * 1000; 

W ten sposób można go podać do a.o. konstruktorem java.util.Date i ostatecznie użyć SimpleDateFormat do konwersji na java.lang.String w pożądany wzór formatu daty, jeśli to konieczne, z wcześniej zdefiniowaną strefą czasową (w przeciwnym razie użyłby systemu default time zone, który nie jest GMT/UTC per se, a zatem sformatowany czas może być wyłączony).

Date date = new Date(millis); 
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM 

W przypadku, jesteś już na Java8, tam LocalDateTime#ofEpochSecond() który pozwala karmić epoka sekund bezpośrednio bez konieczności mnożenia do milisekund smaku.

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC); 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); 
String formattedDate = dateTime.format(formatter); 
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM 
+0

Proszę szczegółowo wyjaśnić, jaki masz wynik i jaki oczekiwany rezultat. Nie jestem bezpośrednio w stanie przekazać ci osobiście, aby zobaczyć problem na własne oczy. Mogę przynajmniej powiedzieć, że opublikowany kod działa dobrze dla mnie i że otrzymałem wynik, jak pokazano w komentarzu ostatniej linii. – BalusC

+0

Właściwie to popełniłem błąd, aby wyraźnie opublikować pytanie.Tutaj pracuję z timingami chicago USA. I moje sekundy to 1320105600. Prawidłowy wynik dla tego pytania to wtorek, listopad 0l, 2011 7:00, ale w poniedziałek, 31 października , 2011 7: 00, PM za pomocą powyższego kodu. – androiduser

+0

Rozumiem, że istnieje różnica strefy czasowej, ale 12 godzin? – BalusC

2
int seconds = 1320105600; 
Date date = new Date(seconds * 1000); 
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a"); 
System.out.println(sdf.format(date)); 
2

java.time

Answer by BalusC jest dobry w tym, że punkty do korzystania java.time. Ale ta odpowiedź używa LocalDateTime, gdzie bardziej odpowiednie jest Instant. A LocalDateTime jest na osi czasu, ponieważ celowo nie ma koncepcji offset-from-UTC lub time zone.

java.time

Ramy java.time jest wbudowana w Java 8 i późniejszych. Klasy te zastępują stare, kłopotliwe klasy czasu i daty, takie jak java.util.Date, .Calendar, java.text.SimpleDateFormat. Zespół Joda-Time zaleca również migrację do java.time. Aby uzyskać więcej informacji, zobacz

. I wyszukaj Stack Overflow dla wielu przykładów i objaśnień.

Znaczna część java.funkcja czasu została przeniesiona do Java 6 & 7 w ThreeTen-Backport i dodatkowo przystosowana do systemu Android w wersji ThreeTenABP.

Instant

Chwila na osi czasu w UTC o rozdzielczości do nanoseconds jest reprezentowana przez klasę Instant.

Instant instant = Instant.ofEpochSecond (1_320_105_600L); 

Zrzut na konsolę. Twoja wartość wejściowa to pierwszy moment z 1 listopada 2011 r. W UTC. Z na końcu, skrót od "Zulu", oznacza UTC.

System.out.println ("instant: " + instant); 

natychmiastowy: 2011-11-01T00: 00: 00Z

ZonedDateTime

W swoich komentarzach można wymienić chcąc zobaczyć to Date-Time przez pryzmat czasu America/Chicago strefa. Użyj proper time zone name. Zastosuj strefę czasową, ZoneId, aby uzyskać obiekt ZonedDateTime. Widzimy, że Chicago jest pięć godzin za UTC w tym dniu.

ZoneId zoneId = ZoneId.of ("America/Chicago"); 
ZonedDateTime zdt = instant.atZone (zoneId); 

ZDT: 2011-10-31T19: 00-05: 00 [Ameryka/Chicago]

Struny

strun widać powyżej są w standardowym formacie ISO 8601. Aby wygenerować ciągi w innych formatach, należy użyć klasy DateTimeFormatter. Możesz określić swój własny wzorzec. Ale zwykle najlepiej jest pozwolić, aby java.time automatycznie lokalizował się w języku ludzkim i normach kulturowych zakodowanych w obiekcie Locale.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL); 
formatter = formatter.withLocale (Locale.US); 
String output = zdt.format (formatter); 

Poniedziałek, 31 października 2011 19:00:00 CDT

Aby określić swój własny format niestandardowy, wyszukiwania przepełnienie stosu dla wielu przykładów i więcej dyskusji.

Powiązane problemy