提供带有偏移量的日期字符串(+0530)与在显示名称中单独指定时区(亚洲/加尔各答)

2024-05-03

提供带有偏移值的日期字符串有什么好处(例如+0530)而不是单独指定其时区作为 TimeZone 显示名称(例如Asia/Calcutta)?


Summary

偏移量准确地告诉您相对于 UTC 的日期和时间,因此它是明确的。时区会告诉您该日期遵循哪些规则(因此您可以推断它是否处于夏令时)。


Details

我不会说有好处,但使用其中一种或另一种时会有所不同。

偏移量只是与 UTC 的差异:+0530意思是“比 UTC 早 5 小时 30 分钟”。

时区是一个地区在其历史上所有不同偏移量的列表。为了Asia/Calcutta时区,history https://www.timeanddate.com/time/zone/india/kolkata?year=1925(至少是我在 Java 8 中得到的)是:

  • 1880 年之前:偏移量为+05:53:28(在发明UTC之前,每个城市都有自己的当地时间,导致这些奇怪的偏移)
  • 从 1880 年到 1941 年:它使用了偏移量+05:53:20
  • 1941年10月1日改为+06:30
  • 1942年5月15日改为+05:30
  • 1942 年 9 月 1 日,DST 开始,偏移量变为+06:30
  • 1945 年 10 月 15 日,DST 结束,偏移量重新设置为+05:30
  • 从那时起,偏移量是+05:30,没有 DST 更改

下面列出了使用时区和偏移量之间的主要区别。我还给出了 Java 8 中的一些示例,只是为了更好地说明:

  1. 如果您使用时区,偏移量将根据其历史记录以及该日期和时间的有效偏移量“计算”

示例:创建一些日期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 之前,偏移量是+05:53:20):

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-09-30T10:00+05:53:20[亚洲/加尔各答]

请注意,偏移量会自动更改。 API 检查时区历史记录,发现前一天 (1941-09-30) 的偏移量不同,并进行相应的调整。

  1. 如果您使用偏移量,则无法说出您所在的时区,因为当时可能有多个时区使用该偏移量 - 检查这个清单 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones查看有多少个时区可以同时使用相同的偏移量。

示例:创建 1941 年 10 月 1 日的日期,并带有偏移量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

输出是:

1941-10-01T10:00+06:30
1941-09-30T10:00+06:30

请注意与前面示例的区别。两个日期都有偏移量+06:30。那是因为我没有使用时区,所以没有历史记录可以检查,并且偏移量永远不会改变。


IMO,没有“更好”的解决方案,只有每种方法之间的差异。您必须选择最适合每种情况的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提供带有偏移量的日期字符串(+0530)与在显示名称中单独指定时区(亚洲/加尔各答) 的相关文章

随机推荐

  • 这段汇编语言代码是什么意思?

    我是一名学生 刚刚开始学习汇编语言 为了更好地理解它 我只是用 C 写了一个简短的代码并将其转换为汇编语言 奇怪的是我有点听不懂 代码是 include
  • 如何在 C 应用程序中将鼠标光标设置在 X11 上

    我有一个相当大且相当旧的 C 应用程序 已移植到 Linux 上 我负责让鼠标光标正常工作 但遇到一些问题 我能够将我们需要的大部分光标转换为使用提供的标准光标X字体光标 http tronche com gui x xlib append
  • 可以在 .h 文件中声明静态全局变量吗?

    static 关键字将全局变量的范围限制为该翻译单元 如果我使用static int x在 h 文件中并包含该 h 文件每隔一个文件 它们不会都属于同一个翻译单元吗 那么 x不是到处可见吗 那么现在static有什么作用呢 另外 有没有什么
  • python RuntimeError:字典在迭代期间更改了大小

    我有这样的 obj hello world foo 0 bar v1 foo 0 name v2 foo 1 bar v3 它应该扩展到 hello world foo bar v1 name v2 bar v3 我在下面写了代码 按 删除
  • 测试 AngularJS 指令的焦点

    如何测试 AngularJS 指令中的焦点 我希望以下内容能够发挥作用 describe focus test function it should focus element function var element
  • 创建自定义 json 转换器来屏蔽敏感信息

    我正在编写一个自定义 json 转换器 它将序列化一个对象并屏蔽包含一些敏感信息的某些字段 我已经创建了转换器 但是当我使用转换器序列化对象时 我得到一个空字符串 有人可以告诉我我做错了什么吗 public class Student pu
  • 如何在python中查找csv文档中的特定行

    我想要做的是读入 csv 文档并找到 SN 列 gt 20 中的所有值 然后创建一个仅包含 SN gt 20 行的新文件 我知道我需要做 阅读原始文件 打开一个新文件 迭代原始文件的行 我能够做的是找到 SN gt 20 的行 import
  • 使用 SingleChildScrollView 时无法向下拖动底部工作表

    我创建了一个带有bottomsheet 和listview builder 的应用程序 在底部 有一个文本按钮 当我将其向上拖动时 底部工作表必须出现 底页上有一张表格 我用 SingleChildScrollView 包裹底部纸张 但是当
  • 如何在屏幕上动态移动 Textview? (框架布局)

    我有一个应用程序 可以在屏幕上的 FrameLayout 上显示相机视图 屏幕处于固定风景模式 我需要编写一个带有动态确定的屏幕坐标的textView 坐标以百分比确定 例如 将文本视图写入屏幕坐标 x 80 y 20 屏幕上 将文本视图写
  • 如何使用C来限制SubString、Limit? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 第1节 include
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • 重新排序 numpy ndarray 的最后一个维度

    我有一个未指定维度的数组 可能是 1D 2D 3D 4D 我想使用与最后一个维度大小相同的索引数组来申请对最后一个维度进行重新排序 我知道如何使用虚拟 if if 语句来做到这一点 import numpy as np a np ones
  • PutAsync 不会向 Web api 发送请求,但 fiddler 工作正常

    几个小时以来我一直在试图找出问题所在 但我就是找不到问题所在 通过 Mvc 应用程序 put 方法不会被命中 请求不会发生 但是当我在 fiddler 中测试它时 api 中的 PutMethod 可以工作 希望有人能为我解决问题 也欢迎提
  • WebStorm已将目录中的所有文件标记为非项目文件

    WebStorm 已将我的项目子目录 根目录的服务器部分 中的所有文件标记为非项目文件 它发生在我转换到 Babel 然后又转换到 TypeScript 的过程中 我已经删除了 TypeScript 的内容 想知道这是否与该配置有关 我相信
  • R中的Score Sentiment函数,始终返回0

    我对分数有一个 可能 愚蠢的问题 情绪 我尝试将此函数与 3 个默认短语一起使用 问题是该函数返回分数 0 0 0 但它应该返回 2 5 4 我不明白这个问题 因为 RGui 不会给我错误 而且我正在遵循教程 我已经下载了否定词和肯定词的列
  • 如何在play 2.0模板中格式化数字/日期?

    我在使用 play 2 0 模板系统时遇到了一些困难 我有一个方法返回 scala 中的 Int 我想使用模式 对其进行格式化 我努力了 order itemCount format and order item count format
  • 会话 ID 不够随机 - ASP.NET

    UPDATE 我们最终与 Acunetix 团队的一些程序员进行了会面 他们意识到他们的代码中可能存在一些错误 导致扫描中显示的问题比实际情况更严重 普遍的共识是忽略扫描结果并使用开箱即用的 ASP NET 会话 ID 生成 因为它对于我们
  • 如何绑定国家/地区更改国际电话输入

    我使用国家代码插件名称国际电话输入 js https intl tel input com 这是我的演示页面 在页面中我想清空手机 输入字段 当国家选择改变时 div class demo h3 Demo h3 div class iti
  • IIS:添加功能

    我需要使用 IIS 7 0 中的 IP 地址和域限制功能编辑 IP 规则 但在我的 Windows 7 计算机上 我的 IIS 中不存在此功能 有谁知道如何向 IIS 添加此功能 我无法在任何地方找到下载 或 IIS 中用于添加功能的部分
  • 提供带有偏移量的日期字符串(+0530)与在显示名称中单独指定时区(亚洲/加尔各答)

    提供带有偏移值的日期字符串有什么好处 例如 0530 而不是单独指定其时区作为 TimeZone 显示名称 例如Asia Calcutta Summary 偏移量准确地告诉您相对于 UTC 的日期和时间 因此它是明确的 时区会告诉您该日期遵