Joda时间LocalDate(对象即时,DateTimeZone区域)构造函数的用途
乔达时间的LocalDate
描述为:
LocalDate是一个不可变的日期时间类,代表没有时区的日期。
然而,还有一个接受时区的LocalDate(Object instant, DateTimeZone zone)
构造函数。 如果对象是无时区的,那么时区构造函数的目的是什么?
构造函数JavaDocs指出:
从表示日期时间的Object构造一个实例,强制时区到指定的时间。
我不知道“强制指定的时区”是什么意思,因为对象是无时区的。 也许它在内部转换为UTC,然后删除时间(保持日期)。
在不知道时区的情况下(或至少与UTC /格林威治的偏差),您无法将瞬间转换为当地日期或时间。 由于第一个参数是一个瞬间(例如Long
或java.util.Date
,因此需要使用第二个参数来指定要使用的时区。
请注意,还有一个构造函数LocalDate(Object)
,它在内部使用默认时区。
瞬间是物理领域的一个概念。 无论您如何表达,这都是一个明确定义的时间点 。 它与概念 - 时区,日历或人类文化的任何约定毫无关系。
例如:阿波罗11号登陆月球的时刻,或者肯尼迪被枪杀的时刻,都是瞬间。 其中每一个都可以用几种方式表示:Julian日历,从泰坦尼克号撞上冰山的那一刻开始流逝的秒钟,一些生活在火星上的外星人使用的日历......所有这些将是不同的表示,但瞬间将是一个单个(就像1903
, 0x76F
或MCMIII
是相同数量的不同表示)。
现在,如果你想将“阿波罗十一月的登陆时刻”转换为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
表示日期,那么它的本地时间取决于时区。 通过指定时区来定义当地时间。
上一篇: Purpose of Joda Time LocalDate(Object instant, DateTimeZone zone) constructor
下一篇: I'm unable to understand the documentation for java.sql.date