2016-12-04 85 views
-2

有沒有辦法強制計算機通過使用java代碼更改其日期格式?我的應用程序使用指定的格式將日期存儲在字符串中,並存儲在磁盤上的文件中。所選擇的格式隻影響字符串變量,但不影響文件,因爲它強制使用系統區域設置。我試圖設置區域設置或更改SimpleDateFormat()中的默認區域設置,但它沒有去。我不明白爲什麼系統設置強制String遵循日期模式。任何澄清將不勝感激。系統日期格式

+2

向我們顯示您的代碼。但在此之前,請參閱[如何完成最小化,完整和可驗證示例](/ help/mcve)。 –

+0

這個問題沒有意義。提供更多的細節和示例代碼。如果您將日期時間值作爲文本寫入文件,應該很容易在從應用程序中提取的代碼片段中演示。 –

+1

歡迎來到Stack Overflow!請查看我們的[SO問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)來幫助你提出一個好問題,從而得到一個很好的答案。 –

回答

1

你的問題並不十分清楚。沒有「系統日期格式」這樣的東西。

避免遺留日期時類

與Java的早期版本中捆綁的舊日期,時間類已被證明是麻煩的,混亂的,和有缺陷的。避免java.util.Date,.CalendarSimpleDateFormat。這些現在是遺留的,由java.time類代替。

ISO 8601

如果您在序列化文件爲文本的日期時間值到磁盤,使用標準ISO 8601格式。這些格式在各種文化中都很直觀,毫不含糊,而且越來越流行,包括新的互聯網和信息標準。

java.time類在解析/生成日期時間值字符串時默認使用ISO 8601格式。

使用Instant類以分辨率達到納秒獲取UTC的當前時刻。

Instant instant = Instant.now(); 

生成一個字符串以表示該時刻爲標準ISO 8601格式的文本。

String output = instant.toString(); 

2016-12-04T06:12:13.455Z

容易再次解析回到對象。

Instant instant = Instant.parse("2016-12-04T06:12:13.455Z"); 

通常最好以UTC工作,但如果需要,您可以將該時刻調整爲時區。

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = instant.atZone(z); 
String outputZdt = zdt.toString(); 

2016-12-04T01:12:13.455-05:00 [美國/蒙特利爾]

參見live code at IdeOne.com


關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。

+0

非常感謝您羅勒的幫助。您明確表示,我需要更多的閱讀和練習。我的意思是系統日期格式化控制面板中的設置 - >用戶爲操作系統設置日期和時間格式的區域。該格式似乎覆蓋了JVM環境以外的所有內容,例如我在系統上設置的文件。對不起,我沒有提前回復,因爲我沒有收到有關您評論的電子郵件通知。 –

相關問題