2017-06-06 12 views
-4

我需要在java中爲所提供的時區格式化日期時間。例如。美國爲mm/dd/yyyy,DE爲dd/mm/yyyy。我有時區,我可以得到zoneId,有人可以幫助我。非常感謝。在java中提供時區的格式日期

+2

嘗試使用Google搜索標題。 – Guy

+0

如果你不提供[sscce](http://sscce.org/)代碼,你將很難幫助你... ... –

+0

去看看這裏。 https://stackoverflow.com/questions/7670355/convert-date-time-for-given-timezone-java – fluffy

回答

1

使用現代的Java日期和時間類已經得到了與日期或時間做的一切。

DateTimeFormatter usFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT) 
      .withLocale(Locale.US); 
    System.out.println(date.format(usFormatter)); 
    DateTimeFormatter deFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT) 
      .withLocale(Locale.GERMANY); 
    System.out.println(date.format(deFormatter)); 

這將打印出類似這樣

6/27/17 
27.06.17 

這不正是你要的格式,但它的Java認爲格式適用於這兩個區域設置。我會嘗試它們,如果用戶投訴,請從模式字符串(例如MM/dd/uuuu)構建我自己的DateTimeFormatter

我用LocalDate在代碼date,但相同的代碼應該用LocalDateTimeOffsetDateTimeZonedDateTime工作。

如果你的意思是推斷從時區的區域設置在ZonedDateTime,我不認爲你可以做到這一點可靠。時區中經常有許多國家,每個國家都有自己的區域設置和自己的格式化日期。例如,德國與挪威,瑞典,丹麥,波蘭,法國,瑞士,奧地利和意大利,西班牙,塞爾維亞等等共享其時區。

如果您打算從舊時區中的時區推斷出它,您當然不能僅僅因爲Date沒有在其中包含時區。

+0

這就是我需要的,我有Long中的日期,在設置了默認時區後,我創建了新日期(長蜱),但我需要爲明確的國家進行格式化。如果你有Locale,你的回答很好,但我只有時區。 – Chavez

+0

您可以猜測一下。我認爲在所提及的國家中的人們將能夠閱讀與德國語言環境格式化的日期,儘管他們可能並不都認爲它是他們自己的。 –

+0

要將從曆元開始的包含毫秒的'long'轉換爲可使用上述代碼格式化的內容,請使用'Instant.ofEpochMilli(millisSinceEpoch).atZone(ZoneId。(「歐洲/柏林」)) - 請填寫用戶的時區,而不是柏林時區。這給你一個'ZonedDateTime',正如我在答案中所說的那樣,我的代碼應該可以使用它。 –

0

希望這會幫助你,

import java.util.*; 
import java.text.*; 

public class DateDemo { 

    public static void main(String args[]) { 

     Date date1 = new Date(); 
     System.out.println(date1); 

     TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 
     Date date2 = new Date(); 
     System.out.println(date2); 

     TimeZone.setDefault(TimeZone.getTimeZone("EST")); 
     Date date3 = new Date(); 
     System.out.println(date3); 

    } 
} 

輸出:

Tue Jun 06 14:02:51 IST 2017 
Tue Jun 06 08:32:51 UTC 2017 
Tue Jun 06 03:32:51 EST 2017 
+1

我認爲你不明白這個問題。這是關於根據時區以不同格式顯示的。在某些國家,日期格式爲mm-dd-yyyy,在某些國家爲dd/mm/yyyy等。 – RealSkeptic