java日期时间转日期_Java时间和日期指南

java日期时间转日期

长期以来,正确处理日期,时间,时区,夏令时,and年等一直是我的烦恼。 本文并不是一个全面的指南时域,请参阅日期和时间在Java中 -更详细,但略有下降,ekhem,日期。 它仍然是相关的,但是没有涵盖Java 8中的java.time 。我想介绍每个初级Java开发人员都应该意识到的绝对最低要求。

事件何时发生?

除了哲学和量子物理学,我们还可以将时间视为一维度量标准,即实数值。 随着时间的流逝,该值将不断增长。 如果一个事件接连发生,我们将为该事件分配更多时间。 同时发生的两个事件具有相同的时间值。 出于实际原因,在计算机系统中,我们将时间存储为离散整数,这主要是因为计算机时钟离散地滴答。 因此,我们可以将时间存储为整数值。 按照惯例,我们将time = 0分配给1970年1月1日,但是在Java中,此值每毫秒递增一次,而不是像UNIX time那样每秒递增。 历史上在UNIX时间中使用32位带符号整数将导致2038年问题 。 因此,Java将时间存储在64位整数中,即使您将其增加一千次也足够了。 话虽这么说,但用Java存储时间的最简单但有效的方法是…… long原始语言:

long timestamp = System.currentTimeMillis();

long存在的问题是,它太普遍了,以至于使用它来存储时间会破坏类型系统。 它可以是ID,可以是哈希值,可以是任何东西。 而且long没有与时域相关的任何有意义的方法。 包裹的第一个办法long在更有意义的对象是java.util.Date因为Java 1.0中称为:

Date now = new Date();

Date类具有很多缺陷:

  1. 它不代表…日期。 认真地讲,正式日期是“ […]由数字[…]指定的月份或年份中的日期” [1],而在Java中,它表示没有任何特定日历(天/月/年)的时间点。
  2. 它的toString()具有误导性,在系统时区中显示日历日期和时间。 不仅误导了成千上万的开发人员以为Date附加了时区。 此外,它显示时间,但日期应仅表示日期,而不是小时。
  3. 它有20多个不推荐使用的方法,包括getYear()parse(String)和许多构造函数。 之所以不建议使用这些方法,是因为它们使您相信Date表示date
  4. java.sql.Date扩展了java.util.Date ,实际上更加准确,因为它确实表示日历日期 (SQL中的DATE )。 但是,这缩小了基类Date的功能,从而违反了Liskov替换原则 。 不相信我吗 java.util.Date.toInstant()可以正常工作,但是java.sql.Date.toInstant()无条件地失败,并带有UnsupportedOperationException ……
  5. 最糟糕的是, Date可变的

有没有想过为什么您的团队中老旧且脾气暴躁的开发人员对不变性如此兴奋? 想象一下一段代码,它将任何一分钟添加到Date 。 简单吧?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值