所以整个Java Date / Calendar / GregorianCalendar事情显然是一个笑话。什么是正确的Date类?
修改:在Android上为第三方构建SDK,其中应用程序需要提供日期
更多编辑:这些事情显然是一个笑话:
答案 0 :(得分:17)
答案 1 :(得分:1)
“正确”的日期类型完全取决于您的申请;但是,java.util.Calendar
通常被接受为java.util.Date
的替代,因为它提供了更多功能(特别是关于提取单个日期元素,如年,月等)。实际上,Date
在某些情况下可以更容易使用(并且是Java自己的DateFormat
类使用的那种情况),因此它是一个判断调用。
在两者之间进行转换并不困难,所以我会选择一个并坚持使用它的API。如果我选择一个,我会使用Date
,因为它是最简单的,恕我直言。
答案 2 :(得分:0)
所以整个Java Date / Calendar / GregorianCalendar事情显然是一个笑话。
是的,与最早版本的Java捆绑在一起的旧日期时间类非常混乱。设计糟糕,笨拙的尝试改进,很多黑客。
但公平地说,这些课程是一项勇敢的努力,旨在解决整个信息产业几十年来一直忽视的令人惊讶的棘手问题。基于Taligent和IBM的先前工作,这些类的作者至少尝试过,几乎所有其他编程语言,平台和工具都只通过了最少的日期支持时间处理。
幸运的是,我们现在拥有业界领先的 java.time 类(JSR 310),内置于Java 8及更高版本中。这些都受到Joda-Time项目成功的启发。事实上,这两项努力都是由同一个人领导的,Stephen Colebourne。
通过使用java.time来纠正您的每一项投诉项目。
Instant
取代java.util.Date
。 AFAIK,Java 8中的java.time中不推荐使用任何内容。 Java 9。2018
是2018年。Month
enum提供了表示一年中每个月的对象,而不仅仅是整数。因此,您可以获得有效值type-safety和自我记录代码。ZonedDateTime
替换java.util.Calendar
。java.util.GregorianCalendar
。 java.time框架使用的接口主要仅供内部使用,鼓励应用程序仅使用具体类。这是一个特定于java.time作为框架需求的设计决策,并且不意味着您应该在应用程序中使用相同的内容。
Chronology
接口和AbstractChronology
类提供此功能。根据西方普遍使用的IsoChronology
标准,默认的年表是ISO 8601。在Java 8& 9,其他捆绑的年代表包括泰语Buddhist,Hijrah(伊斯兰),Minguo(台湾)和Japanese Imperial。第三方可以实施其他方。在ThreeTen-Extra项目中,您会找到additional chronologies Accounting(根据美国国税局出版物538和国际财务报告准则,为52/53周),英国{{3} } cutover,Julian-Gregorian(基督教埃及),Coptic,Discordian (Erisian),Ethiopic(科茨沃斯计划,伊士曼计划),保守International Fixed,{{3} }和Julian& Pax。如果只有某人实施Symmetry010。ZonedDateTime
作为java.time中的基本构建块类,始终以UTC为单位表示分辨率纳秒。其他类型如Instant
& OffsetDateTime
可以使用ZonedDateTime
来回转换。Instant
/ {{1 }} 方法。此外,java.time提供了强大的Symmetry454 French Republican Calendar,并使您能够编写自己的。{3}} TemporalAduster
。另请查看implementations方法,例如plus…
。
minus…
和ChronoUnit.YEARS.between( thisLocalDate , that LocalDate )
,但当然不可取。最好使用java.time对象和ISO 8601字符串来表示日期时间值。Instant::toEpochMilli
> Instant.ofEpochMilli
。有时是合适的,但不要坚持 - 这是我的建议。其他问题之一是与数据库交换日期时间值。请注意,使用符合ChronoUnit::between
或更高版本(JDBC 4.2)的JDBC驱动程序,可以避免与日期时间相关的java.sql类(如JSR 221类)。那些旧课程与麻烦的旧遗产课程有关,不再需要。
LocalDate.now( ZoneId.of( "Europe/Paris" ) ).minusYears( 1 ).getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.FRANCE )
...和...
dimanche
java.sql.Timestamp
框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和& Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
从哪里获取java.time类?