c# - 不同编程语言的库如何处理日期和时间、时间戳和持续时间、闰秒和 - 年、DST 和时区,...?

标签 c# python language-agnostic date time

是否有一个标准机构或特定的规范方式应该如何在实践中实现与时间相关的事情(例如 ICU 用于 Unicode 相关任务),或者这是目前的“尽力而为”,这取决于多少努力、时间和金钱语言和图书馆实现者想花钱吗?

是否有特定且完整的实现可以作为如何处理与时间相关的事情的示例?

你认为哪个现有的图书馆是一个坏的、一个体面的或一个好的例子?

最佳答案

我将尝试使用可能成为 Java 7 一部分的 Java 库来回答第二和第三个问题。

javax.time.* (JSR 310)

这些类是对 JodaTime 的完全重写,试图修复 util.Date 的设计缺陷/util.Time以及 JodaTime。

JSR 310 试图提供一个全面的日期和时间模型,它是类型安全和自记录的。它可与现有类互操作,但也考虑基于 XML 和 DBMS 的用例。
这些类是最终的、不可变的、线程安全的,并且在构造后不能修改。实例是通过一组丰富的工厂方法创建的,这些方法可以在后台缓存事物。

LocalDate dateToday     = LocalDate.of(2010, 9, 14);
LocalDate oneMonthLater = dateToday.with(OCTOBER);
LocalDate oneYearLater  = dateToday.withYear(2011);

API 有一些“面向机器”的类和一些“面向人类”的类:

面向机器的

Instant

与 Unix 或 Java 时间戳相当的时间点。其实还有Instant , TAIInstantUTCInstant这使人们能够准确地选择他们需要的时间定义。 e. “基于天”,“线性,无闰秒”等。

Duration

不一定与特定日期或日历相关联的时间范围。

以人为本

有丰富的类集合可以处理不同的用例,例如仅日期、仅时间、时间和日期、带和不带时区、带和不带 DST。

DateProvider
OffsetDate , LocalDate (, java.sql.Date 兼容性)

TimeProvider
OffsetTime , LocalTime (, java.sql.Time 兼容性)

DateTimeProvider
ZonedDateTime , OffsetDateTime , LocalDateTime (, java.util.GregorianCalendar 兼容性)

InstantProvider
Instant , ZonedDateTime , OffsetDateTime (, java.util.Date 兼容性)

Period

句点代表一个时间跨度,如“5 天”,可以从日期/时间中添加和减去。

Matcher

匹配器启用诸如“这个日期是 2006 年吗?”这样的查询。或“这一天是今年的最后一天吗”。

Adjuster

如果您想要进行更复杂的更改,例如“给我本月的最后一天!”或“圣诞节后的第二个星期二,拜托!”。

Resolver

解析器允许用户定义如果某个日期无效(例如 2010 年 2 月 31 日)会发生什么:
DateResolver previous = DateResolvers.previousValid();
LocalDate date = date(2010, 2, 30, previous);
// date = 2010-02-28

处理时区和 DST 数据

可以使用当前时区数据或序列化时的时区数据来序列化这些类并反序列化它们。
此外,可以比较来自不同时区的规则:可以查明 DST 规则是否已更改,例如。 G。版本 2010e 和 2010f 之间的日期在伦敦或莫斯科,并决定如果时间处于间隙或重叠时应该做什么。

日历系统

虽然一切都是基于ISO-8601 ,提供希伯来语、Hijrah、日语、ThaiBuddist 等时间系统的简单日历。

格式化和解析
toString()返回 ISO8601 和类似 SimpleDateFormat 中的模式和更高级的支持。

集成
  • 数据库
  • JodaTime
  • 旧版 JDK 类 ( java.util.* )
  • XML


  • 引用文献:
  • https://jsr-310.dev.java.net/nonav/doc-2010-06-22/index.html
  • JavaZone 2010 - Stephen Colebourne: Time to fix it! - JSR-310 Date and Time API
  • 关于c# - 不同编程语言的库如何处理日期和时间、时间戳和持续时间、闰秒和 - 年、DST 和时区,...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3709870/

    相关文章:

    C# MySQL DataRow 具有多个值

    c# - EnumerateFiles in drive 使用 LINQ 跳过回收站

    c# - 这是否符合任何已知的设计模式?

    python - 当我有一个唯一列表时,如何停止该函数?

    python-constraint 添加动态约束

    language-agnostic - 通过估算一年编写的代码来计算可以节省多少时间

    sql - 执行脚本图

    javascript - Web 浏览器对看似畸形文件的容忍度

    c# - 是否可以访问接口(interface)类型的其他成员?

    python - window : Z3Exception ("init(Z3_LIBRARY_PATH) must be invoked before using Z3-python")