我在一个脚本中使用格式"yyyy-MM-dd_hhmmss"
并在我的脚本中使用它。
如果我修改了系统中的区域(时区),日期,它就会破坏这种格式。
是否有任何通用日期格式无论系统时钟如何设置时间/时区都一直有效?
答案 0 :(得分:3)
你的问题不清楚。
如果您要求一个神奇的解析模式,可以处理日期时间值的任何可能的传入文本表示,答案是"否"。 " 1/2/12"的简单例子证明这一点,可能是1月2日,2月1日,或其他。你可以做出猜测和假设,但永远不要确定。很多重复的问题都讨论了很多。
可以肯定的是,您必须知道传入的数据。
如果您要求建议的模式来格式化您自己的日期时间值的文本表示,那么标准的ISO 8601格式就是您的选择。阅读Wikipedia page。
YYYY-MM-DDTHH:MM:SS.SSSZ
多次讨论多次问题。
java.time框架通过附加适当的时间名称扩展了该字符串格式。聪明且有用,但还不是标准。
处理日期时间的最佳做法是在后端使用UTC时区。
仅在用户界面中调整到时区,或在预期时导出。
在许多重复的问题中进行了讨论。
java.util.Date
避免与Java捆绑在一起的java.util.Date和.Calendar类。众所周知,它们在设计和实施方面存在问题。
而是在Java 8中使用Joda-Time库或新的java.time package(受Joda-Time启发)。这两个都使用ISO 8601作为解析/生成日期时间值的字符串表示的默认值。
Joda-Time 2.7中的示例......
DateTime dateTime = new DateTime( "2015-01-02T12:34:56.789-02:00", DateTimeZone.forID( "America/Montreal" ) ) ;
在许多重复的问题中进行了讨论。
跟踪毫秒数的建议是错误的。
对于人类读者来说,这样一个从历史算起来没有任何意义,使得调试复杂且错误的数据不可见。
哪个epoch? couple dozen已在各种软件系统中使用。
哪个粒度粒度?各种软件系统使用整秒,毫秒,微秒,纳秒或其他。
再次,在许多重复的问题中进行了讨论。