爪哇公历日期至今
这应该很简单
customerSearch.get("DateOfBirth")
其中customerSearch是一个HashMap<String, Object>
并且是一个公历日期
但我需要一个普通的Date
对象
我试过了
Date dateOfBirth = new Date(
((GregorianCalendar) customerSearch.get("DateOfBirth")).getTimeInMillis());
但公历日期不能定为现在
有什么帮助吗
# 1 楼答案
没有java类中包含哪些类的实例呢?如果它只是一个普通的
GregorianDate
。除非是你自己的课,如果是的话,你没有提到。那么,为了以防万一,公历只是一个常规的Date
,因为当今世界上大多数人都使用公历?那么,地图在^{Date
,那么您的代码应该是:# 2 楼答案
tl;博士
爪哇。时间
您正在使用甚至可能滥用多年前被java取代的糟糕的日期时间类。JSR 310定义的时间类
ZonedDateTime
取代GregorianCalendar
Instant
取代java.util.Date
LocalDate
取代java.sql.Date
如果您必须与尚未更新为java的旧代码进行互操作。时间,你可以来回转换。调用添加到旧类中的新转换方法
如果只需要不带时间和时区的日期,请提取
LocalDate
如果你所说的
Date
是指java.sql.Date
类,那么应该使用上面的行,而不是使用LocalDate
如果你说的
Date
是指java.util.Date
,那么在那里使用这个类是错误的。该课程代表UTC的一个时刻。通过将GregorianCalendar
/ZonedDateTime
中的分区时刻调整为UTC,可以更改日期转换
如果您需要一个
java.util.Date
对象来与尚未为java更新的旧代码进行互操作。时间,你可以转换。Ajava.util.Date
代表UTC中的一个时刻,因此我们需要java中的等效值。时间,Instant
,也是UTC中的一个时刻,但分辨率更高,为纳秒,而不是毫秒我们可以从上面看到的
ZonedDateTime
中提取一个Instant
。实际上,这只是从分区值调整为UTC值。同一时刻,时间线上的同一点,不同的挂钟时间在旧类上使用新的转换方法
如果你需要走另一条路,从传统走向现代
使用合适的类型
如果你试图表示一个出生日期,通常是这样做的,只有一个没有时间和区域的日期,那么在你的地图中使用
LocalDate
。类GregorianCalendar
、java.util.Date
和ZonedDateTime
都代表一个时刻,时间线上的一个特定点。它们不应该只用于约会java.sql.Date
类假装只是一个日期,但通过一个糟糕的设计决策,作为java.util.Date
的子类,它确实包含一天中的某个时间和偏移/区域。如上所述,这个类已被LocalDate
取代关于
java.util.Date
或java.sql.Date
没有什么比任何其他日期时间类更“正常”的了java.util.Date
代表UTC中的一个时刻,总是UTC,不管它设计得多么糟糕toString
的方法告诉你什么(一个谎言)。如果需要UTC时间,请使用java.time.Instant
李>java.sql.Date
仅表示日期,但正如所讨论的,实际上在内部包含一个时间和区域/偏移量。用java.time.LocalDate
代替表示日期而不是时刻李>GregorianCalendar
代表一个特定地区(时区)的人们使用的挂钟时间。为此,请使用ZonedDateTime
李>java.sql.Timestamp
代表UTC中的一个时刻,但分辨率更高,为纳秒,而不是毫秒。java中所有与瞬间相关的类。时间使用纳秒的分辨率。因此,在UTC中,如果分辨率为UTC,请使用java.time.Instant
而不是Timestamp
李>从JDBC 4.2开始,我们可以直接交换java。有数据库的时间课程。因此,在数据库工作中,无需再次触摸
java.sql.Date
或java.sql.Timestamp
关于java。时间
java.time框架内置于Java8及更高版本中。这些类取代了麻烦的legacy日期时间类,如^{} 、^{} 、&^{}
目前位于maintenance mode的Joda-Time项目建议迁移到java.time类
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和解释。规范是JSR 310
你可以交换java。时间对象直接与数据库连接。使用符合JDBC 4.2或更高版本的JDBC driver。不需要字符串,也不需要
java.sql.*
类去哪里获取java。时间课
ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如^{} 、^{} 、^{} 和more