c# - 如何创建或设置具有最大值的 JodaTime DateTime 对象?

标签 c# java datetime max jodatime

我正在将一些 C# 代码转换为 Java,并选择了 JodaTimeDateTime 类来替换 C#System.DateTime

C# 中,DateTime 类有一个名为 MaxValue 的字段和一个名为 MinValue 的字段,它返回最大的DateTime 对象可以容纳的最小可能值。

我正在尝试使用 JodaTime api 实现相同的目的。我已经阅读了其他帖子的一些建议

这个:Java equivalent of .NET DateTime.MinValue, DateTime.Today回答如何在 JodaTime 中设置今天的日期,但是在回答问题的后半部分时,关于最小值,他们转向 CalendarDate

同样,我看到过关于将最大长值作为构造函数参数传递的建议,但它因依赖于将来可能会更改的类而受到批评,因此在 API 更新后可能不兼容或不准确。

那么,有没有一种绝对正确的方法可以做到这一点?如果没有,是否有实现此目标的好方法?

最佳答案

Java 8 LocalDate 有两个值。 LocalDate.MAXLocalDate.MIN

LocalDate.MAX - The maximum supported LocalDate, '+999999999-12-31'. This could be used by an application as a "far future" date.

LocalDate.MIN - The minimum supported LocalDate, '-999999999-01-01'. This could be used by an application as a "far past" date.

注意:这些不会转换为 Long.MIN_VALUE 或 Long.MAX_VALUE。


如果从 C# 迁移并且日期/时间的工作方式对您很重要,我建议使用 Java 8,因为它具有闭包和基于 JodaTime 的新 DateTime API。如果您担心 API 的 future ,您应该使用这个新的 DateTime API。

我认为您可以假设 Long.MIN_VALUE 和 Long.MAX_VALUE 永远不会改变,因为它们基于带符号的 64 位值如何工作的定义。 (64 位值的工作方式很可能在您出生之前就已标准化)您还可以假设 Date 不会更改,因为它自发布以来并已被替换后没有太大变化更没有理由改变它。理论上它可能会被弃用,但实际上仍然有太多代码使用它。

恕我直言,我使用 long 来表示以毫秒为单位的时间 ala System.currentTimeMillis() 并且我使用 Long.MIN_VALUE 和 Long.MAX_VALUE。

如果您担心使用良好的 API 和 future 验证您的代码,我建议您避免使用日历。并不是说一切都不好,而是有充分的理由想要更换它。

关于c# - 如何创建或设置具有最大值的 JodaTime DateTime 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23103666/

相关文章:

python - timedelta 和两个时间范围

c# - 具有流畅验证的集成测试api

ruby-on-rails - Date.tomorrow 引用两天后

c# - Parallel.For 与 for

java - If 语句中的空指针异常

用于 session 检查的 Java FilterImplementation

java - 当调用 thread.join() 时,谁以及何时通知 thread.wait()?

python - Pyspark - 将 datetime.time 函数应用于数据帧的所有行

c# - HttpClient 看不到 "Set-Cookie" header

c# - 使用 C# 扫描 Redis 缓存中的缓存键