gpt4 book ai didi

java - JodaTime 中的最小/最大日期/日期时间

转载 作者:太空狗 更新时间:2023-10-29 22:55:15 26 4
gpt4 key购买 nike

在 JodaTime 中有什么方法可以构造一个总是比任何其他日期/日期时间更小/更大的日期/日期时间?类似

的东西
DateTime bigBang = DateTime.xxx();
DateTime endOfUniverse = DateTime.yyy();

约束:我不想使用标准的 Java 日期库。

最佳答案

java.time

Joda-Time 项目现在处于维护模式。该团队建议迁移到 java.time 类。

对于 java.time 中的最小值/最大值,请参阅 my Answer关于类似的问题。

Joda Time

Joda-Time跟踪时间作为 milliseconds 的计数自 1970 年第一时刻以来 UTC .此计数使用 64-bit 保持long 整数。因此,从技术上讲,最大值和最小值是 long 的 +/- 限制。

… new DateTime( Long.MIN_VALUE )
… new DateTime( Long.MAX_VALUE )

Joda-Time 没有这样的最小/最大值作为常量方便使用。相比之下,请注意 Joda-Time 的继任者 java.time内置于 Java 8 及更高版本中,确实提供常量 LocalDateTime.MINLocalDateTime.MAX .

顺便说一下,Joda-Time 团队建议我们应该迁移到 java.time。许多 java.time 功能在 ThreeTen-Backport 中被反向移植到 Java 6 & 7 ,在ThreeTen-ABP中进一步适配Android .

太大,太小

谨防这些极端情况。它们的使用并不实用。各种库、应用程序、数据库和日期时间值的其他接收器/源可能有很大不同的限制,有些大得多但通常小得多。

例如,许多系统使用 UNIX 和 POSIX 的旧传统来跟踪时间作为自 1970-01-01T00:00:00Z 以来整秒的 32 位整数计数。 +/- 20 亿秒的自然极限导致隐现 Year 2038 Problem .

另一个限制是表单和报告中字段的物理显示大小,预计年份中只有四位数字。

解决方法

您可以定义自己的最小值/最大值。

您可能需要极值,例如 0000 年和 9999 年。Joda-Time 支持晚于 9,999 的年份,但我会坚持使用 4 位数字以适应屏幕和报告中显示的常用格式。从视觉上看,四个九是假日期。

或者您可能需要适合您的业务逻辑的预期最小值。如果构建一个新的发票系统,那么您知道年份应该始终是今年或更晚。

我建议在辅助类上定义常量。像这样:

package com.example;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;

public class JodaTimeHelper {

static final public DateTime START_OF_TIME = new DateTime( 0000, 1, 1, 0, 0, 0, DateTimeZone.UTC );
static final public DateTime END_OF_TIME = new DateTime( 9999, 1, 1, 0, 0, 0, DateTimeZone.UTC );

static final public DateTime MINIMUM_INVOICE_DATETIME = new DateTime( 2015, 1, 1, 0, 0, 0, DateTimeZone.UTC );

}

下面是调用这些常量的语法。

System.out.println( "START_OF_TIME: " + JodaTimeHelper.START_OF_TIME );
System.out.println( "END_OF_TIME: " + JodaTimeHelper.END_OF_TIME );
System.out.println( "MINIMUM_INVOICE_DATETIME: " + JodaTimeHelper. MINIMUM_INVOICE_DATETIME );

运行时。

START_OF_TIME: 0000-01-01T00:00:00.000Z
END_OF_TIME: 9999-01-01T00:00:00.000Z
MINIMUM_INVOICE_DATETIME: 2015-01-01T00:00:00.000Z

关于java - JodaTime 中的最小/最大日期/日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32593206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com