假设我们有一个类存储某些日期,例如2014年2月27日。请考虑该类的这两种可能的实现:
现在我被告知第二种方式是“更好”或更优选的方式,但我不确定为什么。有人在乎解释吗?
答案 0 :(得分:2)
没有正确或错误的方式。很多将取决于你有多少空间来编码日期和你打算用它做什么。 Unix epoch是自1970年1月1日星期四(UTC)以来的秒数,我确信Thompson和Richie在选择它们时知道他们在做什么。
Windows自FILETIME时间起使用自1600年1月1日起的100纳秒间隔的数量,并使用其SYSTEMTIME次的年/月/日/小时/分/秒/ ms,因此即使在一个平台上,您也可以有多种表示形式。
答案 1 :(得分:1)
分别存储日,月和年的优点:
存储自1900年1月1日以来的天数的优点:
答案 2 :(得分:1)
两种表示都在实践中使用,两者都相当普遍。每个都有其独特的优点和缺点:
使用其他方法很难超越每种方法的优势。实际上,在某些情况下,相同的类库可能基于日期的不同表示而具有两个类。例如,Java类库提供了java.util.Calendar
类,它实现了第一种方法的扩展版本,以及java.util.Date
类,它实现了第二种方法。
答案 3 :(得分:0)
如果您可以考虑其他字符串格式,请查看标准格式ISO 8601。
2014-02-27T23:03:14
→当地日期时间,没有时区2014-02-27T23:03:14+3:00
→比UTC早三个小时的日期时间。2014-02-27T23:03:14-08:00
→比UTC(美国西海岸)晚8小时2014-02-27T23:03:14Z
→UTC时无偏移。通常称为“Zulu”时间,因此Z
是Zulu的缩写,是+00:00
的替代。java.time package中的新Java 8通过附加offset之外的时区名称来扩展此格式。时区是偏移加上规则和有关Daylight Saving Time(DST)和其他异常的历史记录。
2014-02-27T23:03:14-08:00[America/Los_Angeles]
请注意,此格式的字符串按字母顺序按时间顺序排序(如果所有字符串都在同一时区)。