我知道如何得到相反的结果。给定一个时区,我可以通过以下代码片段获取时区偏移量:
TimeZone tz = TimeZone.getDefault();
System.out.println(tz.getOffset(System.currentTimeMillis()));
Run Code Online (Sandbox Code Playgroud)
我想知道如何从时区偏移量获取时区名称。
鉴于,
timezone offset = 21600000(以毫秒为单位;+6.00 偏移量)
我想获得以下任何可能的时区名称的结果:
(GMT+6:00) Antarctica/Vostok
(GMT+6:00) Asia/Almaty
(GMT+6:00) Asia/Bishkek
(GMT+6:00) Asia/Dacca
(GMT+6:00) Asia/Dhaka
(GMT+6:00) Asia/Qyzylorda
(GMT+6:00) Asia/Thimbu
(GMT+6:00) Asia/Thimphu
(GMT+6:00) Asia/Yekaterinburg
(GMT+6:00) BST
(GMT+6:00) Etc/GMT-6
(GMT+6:00) Indian/Chagos
Run Code Online (Sandbox Code Playgroud) 我们在应用程序中使用 Angular-Ui Bootstrap Popup DatePicker,并且遇到了诸如此类的问题:前一天被选择为用户实际选择的日期。
我们将选择器的日期设置为来自服务器 (json) 的 UTC。虽然 Javascript Date 对象是本地的,因此不匹配。
作为解决方案(显然),他们添加了一个 ngModelOptions 并且我看到它的用法如下:
var date = new Date()
$scope.timezone = ((date.getTimezoneOffset() / 60) * -100)
Run Code Online (Sandbox Code Playgroud)
带标记
<input type="date"
ng-model="dateModel"
ng-model-options="{timezone: timezone}" />
Run Code Online (Sandbox Code Playgroud)
但是该选择器的 doco 并没有真正解释它如何使用/消耗该时区属性。我能找到的最接近的解释是 ngModelOptions 本身的 doco,其中写道:
您可以通过在 timezone 属性中提供时区名称来指定日期/时间输入指令所需的时区。
我希望有人能够简要解释一下该选择器如何使用 ngModelOptions 指令的时区属性,以及我是否应该将其设置为 utc 或将浏览器偏移设置为 utc。
谢谢
javascript timezone timezone-offset angularjs angular-ui-bootstrap
我需要转换GMT为亚利桑那州时间。亚利桑那州目前已MST关闭夏令时。
然而在 Joda TimeDateTimeZone代码中,MST已映射到America/Denver:
map.put("MST", "America/Denver");
Run Code Online (Sandbox Code Playgroud)
可以看出,目前丹佛实行夏令时,因此有MDT。DateTimeZone那么为什么要在代码中进行这样的映射呢?
在从 转换为亚利桑那州本地时区时GMT,我得到了偏移量,因为GMT-6这是错误的,而且应该是这样GMT-7,因为MST没有夏令时。
这是一个错误吗?如何解决问题?
我正在尝试使用此代码来解析带有时区的日期字符串进行测试:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZZZZZ", Locale.US);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse("2017-07-26T06:00-06:00"));
int offset = calendar.getTimeZone().getRawOffset();
Run Code Online (Sandbox Code Playgroud)
我正在尝试将时区从 更改-06为+09,但offset始终包含10800000.
如何正确解析带有时区的日期(我需要时间和时区)?
ZonedDateTime我正在使用 JDK 8,并且Timestamp经常使用它。但我仍然无法解决我面临的问题。
假设我得到了TimestampGMT (UTC) 格式的文件,并且我的服务器位于某处。假设它设置为Asia/CalcuttaTimeZone (其 ZoneOffset 为+05:30)。
基本上如何在时间戳中添加/减去我的时区偏移量?
Input : 2017-09-13 13:10:30.333
Output: 2017-09-13 18:40:30.333
Run Code Online (Sandbox Code Playgroud)
解释 :在输入中,时区偏移量 5hrs 30mts 已添加到输入中。此外,输入是 Timestamp 类型,输出也是 Timestamp 类型。
我使用ZoneID.systemDefault()函数来检索 JVM 已知的时区。就我而言,时区结果是Asia/Calcutta.
当我转到浏览器开发工具并在控制台中编写 new Date() 时,它会给出以下内容
Mon Dec 18 2017 17:11:29 GMT+0200
Run Code Online (Sandbox Code Playgroud)
我认为它应该返回 UTC 时间。
问题是我在 AWS 上有一台服务器,它将 UTC 时间写入数据库。它将它写为字符串,在客户端我执行以下操作
const updatedMilliAgo = new Date() - new Date(timeStrFromDb);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,差异甚至是两个小时,因为我在写入服务器后立即检查它。
我在这里做错了什么?
由于 Rails 对日期对象进行了猴子修补,因此我不清楚这是 Rails 特定行为还是 Ruby 特定行为。
DateTime.now.utc.iso8601
=> "2018-02-20T06:31:44+00:00"
Time.now.utc.iso8601
=> "2018-02-20T06:31:44Z"
Run Code Online (Sandbox Code Playgroud)
请注意一个具有时区字符串“+00:00”,另一个具有字符串“Z”。它们在 iso8610 标准中是等效的,但我试图在给定任一起始类类型的情况下生成相同的字符串。
Time 上的 Ruby 文档甚至没有记录该#iso8601方法,他们只是展示了它在不同上下文中的使用情况,所以我不确定如何弄清楚发生了什么。
我正在从Google和Microsoft获取用户的日历时区。Google 在其日历 API响应中提供时区区域:
timezone: Asia/Kolkata
虽然Microsoft Graph API提供了这样的时区详细信息,但timezone: 'Indian Standard Time'
我想以offset秒为单位找到时区以对日期对象执行一些操作。
是否有不同的方式或某些来源可以让我以csv或json的形式获取所有这些详细信息,这些详细信息可以导入到数据库表中并用于进一步的操作?
PS:我查看了一些示例,moment.js但发现它对我的用例没有帮助
我有这个代码:
String date = "2019-04-22T00:00:00+02:00";
OffsetDateTime odt = OffsetDateTime
.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.withOffsetSameInstant(ZoneOffset.of("+00:00"));
System.out.println(odt);
Run Code Online (Sandbox Code Playgroud)
这个打印: 2019-04-21T22:00Z
如何打印2019-04-21T22:00+00:00?用 offset 代替Z.
我需要以秒为单位获取本地时间和 UTC 时间。我在 StackOverflow 中阅读了一些帖子并找到了一些解决方案,正如前面提到的那样:
Instant time = Instant.now();
OffsetDateTime utc = time.atOffset(ZoneOffset.UTC);
int utcTime = (int) utc.toEpochSecond();
int localTime = (int) time.getEpochSecond();
System.out.println("utc " + utcTime + " local " + localTime);
Run Code Online (Sandbox Code Playgroud)
但结果并不是我所期望的。现在是UTC时间。输出:
utc 1593762925
local 1593762925
Run Code Online (Sandbox Code Playgroud)
调试后我发现 Instant.now() 已经是 utc。我找不到如何在当前时区(即我的系统区域)中获取时间。
我在 API 中找到了一些解决方案,但出现错误:
OffsetDateTime utc = time.atOffset(ZoneOffset.of(ZoneOffset.systemDefault().getId()));
Run Code Online (Sandbox Code Playgroud)
线程“main”中的异常 java.time.DateTimeException:ZoneOffset 的 ID 无效,格式无效:Europe/Astrakhan 在 java.base/java.time.ZoneOffset.of(ZoneOffset.java:241)
UPD:我的问题是如何在本地时区和 UTC 中以秒为单位获取当前时间?即自 1970-01-01T00:00:00 GMT+4 和 1970-01-01T00:00:00 GMT+0 以来的秒数
UPD2:我有一些设备需要从 1970 年开始以秒为单位的 UTC 时间和以秒为单位的发件人本地时间响应。为什么?我不知道。对我来说是黑匣子。