提供带偏移值的日期字符串(例如curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
)而不是将其时区单独指定为TimeZone显示名称(例如+0530
)有什么好处?
答案 0 :(得分:2)
偏移量确切地告诉您相对于UTC的日期和时间是什么,因此它不含糊。时区会告诉您此日期遵循的规则(因此您可以推断它是否在DST中)。
我不会说有好处,但是当你使用其中一种时会有所不同。
偏移量只是与UTC的差异:+0530
表示"比UTC和#34;提前5小时30分钟。
时区是区域历史记录中所有不同偏移的列表。对于Asia/Calcutta
时区,history(至少是我在Java 8中获得的那个)是:
+05:53:28
(在UTC发明之前,每个城市都有自己的当地时间,导致这些奇怪的偏移)+05:53:20
+06:30
+05:30
+06:30
+05:30
+05:30
,没有DST更改下面列出了使用时区和偏移量之间的主要区别。我还提供了Java 8中的一些示例,只是为了更好地说明:
示例:在Asia/Calcutta
时区中创建一些日期:
// get the timezone
ZoneId zone = ZoneId.of("Asia/Calcutta");
// 1941-10-01 - when the offset changed to `+06:30`
System.out.println(ZonedDateTime.of(1941, 10, 1, 10, 0, 0, 0, zone)); // 1941-10-01T10:00+06:30[Asia/Calcutta]
// 2017 - the current offset is `+05:30`
System.out.println(ZonedDateTime.of(2017, 10, 1, 10, 0, 0, 0, zone)); // 2017-10-01T10:00+05:30[Asia/Calcutta]
输出结果为:
1941-10-01T10:00 + 06:30 [亚/加尔各答]
2017-10-01T10:00 + 05:30 [亚/加尔各答]
在第一种情况下,日期是1941-10-01(当偏移量更改为+06:30
时),因此API会检查时区历史记录并获取该日期的有效偏移量。
对于第二种情况(2017-10-01)也是如此 - 它获得该日期的有效偏移量,即+05:30
。
还有更多:如果我在1941-10-01之前得到一天,那么偏移将是前一个(根据时区历史,在1941-10-01之前,偏移是{{1} }):
+05:53:20
输出结果为:
1941-09-30T10:00 + 05:53:20 [亚/加尔各答]
请注意,偏移量会自动更改。 API检查时区历史并查看前一天(1941-09-30),偏移量不同并相应地进行调整。
示例:使用偏移ZonedDateTime z = ZonedDateTime.of(1941, 10, 1, 10, 0, 0, 0, zone);
System.out.println(z.minusDays(1)); // 1941-09-30T10:00+05:53:20[Asia/Calcutta]
在1941-10-01创建日期并获取上一个日期
06:30
输出结果为:
1941-10-01T10:00 + 06:30个
1941-09-30T10:00 + 06:30
请注意与前一个示例的区别。两个日期都有偏移量ZonedDateTime zdt = ZonedDateTime.of(1941, 10, 1, 10, 0, 0, 0, ZoneId.of("+06:30"));
System.out.println(zdt); // 1941-10-01T10:00+06:30
System.out.println(zdt.minusDays(1)); // 1941-09-30T10:00+06:30
。那是因为我没有使用时区,因此无法检查历史记录,且偏移量永远不会改变。
IMO,没有"更好"解决方案,每种方法之间只有差异。您必须为每个案例选择最佳选择。