2016-12-04 83 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环境以外的所有内容,例如我在系统上设置的文件。对不起,我没有提前回复,因为我没有收到有关您评论的电子邮件通知。 –

相关问题