Joda时间LocalDate(对象即时,DateTimeZone区域)构造函数的用途

乔达时间的LocalDate描述为:

LocalDate是一个不可变的日期时间类,代表没有时区的日期。

然而,还有一个接受时区的LocalDate(Object instant, DateTimeZone zone)构造函数。 如果对象是无时区的,那么时区构造函数的目的是什么?

构造函数JavaDocs指出:

从表示日期时间的Object构造一个实例,强制时区到指定的时间。

我不知道“强制指定的时区”是什么意思,因为对象是无时区的。 也许它在内部转换为UTC,然后删除时间(保持日期)。


在不知道时区的情况下(或至少与UTC /格林威治的偏差),您无法将瞬间转换为当地日期或时间。 由于第一个参数是一个瞬间(例如Longjava.util.Date ,因此需要使用第二个参数来指定要使用的时区。

请注意,还有一个构造函数LocalDate(Object) ,它在内部使用默认时区。


瞬间是物理领域的一个概念。 无论您如何表达,这都是一个明确定义的时间点 。 它与概念 - 时区,日历或人类文化的任何约定毫无关系。

例如:阿波罗11号登陆月球的时刻,或者肯尼迪被枪杀的时刻,都是瞬间。 其中每一个都可以用几种方式表示:Julian日历,从泰坦尼克号撞上冰山的那一刻开始流逝的秒钟,一些生活在火星上的外星人使用的日历......所有这些将是不同的表示,但瞬间将是一个单个(就像19030x76FMCMIII是相同数量的不同表示)。

现在,如果你想将“阿波罗十一月的登陆时刻”转换为LocalDate (地球日历月历中使用的一个月 - 年),那么你将会进入一个完全不同的领域, - 你需要知道时区,因为在一些国家即时(1969年7月20日,20:17:40 UTC)对应于1969年7月20日,其他国家到7月21日


您应该阅读整个JavaDoc:

如果对象不包含年表,则使用ISOChronology。 如果指定的时区为空,则使用默认区域。 一旦构造函数完成,区域就不再使用了。

识别的对象类型在ConverterManager中定义,包括ReadablePartial,ReadableInstant,String,Calendar和Date。 字符串格式由ISODateTimeFormat.localDateParser()描述。 默认的字符串转换器会忽略该区域,只会分析字段值。

这样日期(字符串,日历,日期等)的表示与指定的时区一起给你当地的时间。

例如,如果你有一个java.util.Date表示日期,那么它的本地时间取决于时区。 通过指定时区来定义当地时间。

链接地址: http://www.djcxy.com/p/18521.html

上一篇: Purpose of Joda Time LocalDate(Object instant, DateTimeZone zone) constructor

下一篇: I'm unable to understand the documentation for java.sql.date