标签: timezone-offset

标准时间和夏令时间的 DateTimeZone 和 UTC 偏移量

我在从 PHP DateTimeZone 和底层数据库中获取 UTC 偏移信息时遇到问题。我对每个 DT/ST 对都很接近,但通常少一小时 (DT) 的时区则不然。

\n\n

例如(来源):

\n\n

东部夏令时( EDT ),遵守夏令时(春季/夏季)时比协调世界时 ( UTC\xe2\x88\x9204:00 ) 晚 4 小时。

\n\n

观察标准时间(秋季/冬季)时的东部标准时间( EST ) 比协调世界时间 ( UTC\xe2\x88\x9205:00 ) 晚 5 小时。

\n\n

到目前为止,我获得了 UTC 偏移量(其中DateTimeZone::getOffset相对于 GMT 表示,但我认为这是相同的),如以下代码所示:

\n\n
$zones = [\'EDT\', \'EST\'];\n\nforeach ($zones as $zone) {\n    // get offset\n    $timezone = new DateTimeZone($zone);\n    $offset = $timezone->getOffset(new DateTime(null, $timezone));\n\n    printf("%s (%s) %s\\n", $zone, $timezone->getName(), format_offset($offset));\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

示例输出(完整示例,我使用 PHP 5.6.1RC1):

\n\n
EDT …
Run Code Online (Sandbox Code Playgroud)

php timezone datetime utc timezone-offset

1
推荐指数
1
解决办法
2252
查看次数

获取简化的 ISO 8601 日期字符串的时区

我有两个日期字符串,每个字符串位于不同的时区。我认为这些字符串采用“简化”ISO 8601 格式。下面列出了两个示例日期。

  • 2017-08-14T18:41:52.793Z
  • 2017-08-14T23:41:52.000Z

第一个日期采用 CDT,第二个日期采用 UTC。我相信每个字符串的最后四位数字表示时区。

new Date()奇怪的是,当我为其中每一个设置时,我都通过 报告了不正确的日期console.log()。例如:

const local_date = new Date("2017-08-14T18:41:52.793Z");
const remote_date = new Date("2017-08-14T23:41:52.000Z");

console.log("local_date = " + local_date);
console.log("remote_date = " + remote_date);
Run Code Online (Sandbox Code Playgroud)

输出:

local_date = 2017 年 8 月 14 日星期一 13:41:52 GMT-0500(中部夏令时间)
Remote_date = 2017 年 8 月 14 日星期一 18:41:52 GMT-0500(中部夏令时间)

尽管 CDT 中提供了源日期,但似乎第一个日期被减去了 5 个小时;这就像假设两个日期都是以 UTC 格式提供的。

https://jsfiddle.net/nkax7cjx/1/

我在这里没有错什么?

javascript datetime date iso8601 timezone-offset

1
推荐指数
1
解决办法
7476
查看次数

将时区偏移量“+00:00”转换为分钟

我有一个返回timezone offset字符串的函数(如“+03:00”),我想使用 moment.js 或内置的纯 javascript 选项将此字符串转换为分钟偏移量(“+03:00”应变为 180)

我怎样才能做到这一点?

javascript timezone-offset momentjs

1
推荐指数
2
解决办法
2726
查看次数

伦敦的时区

我正在尝试对给定城市(例如伦敦)使用单个时区,因此无论夏令时如何,我都可以始终在给定的伦敦时间运行任务。

所以,简而言之

冬季和夏季,任务可以在伦敦时间下午 4 点运行。

我使用中部标准时间为纽约设置任务,但我可以看到我的任务运行时间晚于纽约夏令时一周前开始的一个小时。

有谁知道.Net 是否存在代表城市当地时间的单一时区?

我不想使用 BST 和 GMT,因为我需要配置两次。

希望我的问题有意义。

.net timezone timezone-offset

1
推荐指数
1
解决办法
2527
查看次数

当后缀为“Z”时,ASP.NET Core API ISO8601 未在本地时间解析

场景:我有一个接受 POST 请求的 REST-API。作为正文数据,传递了 ISO8601 格式的日期时间。

{
    "validate": "2019-12-02T23:00:00Z",
    "configuration": {},
    "sortId": 1
}
Run Code Online (Sandbox Code Playgroud)

通过 MVC 中的模型绑定,可以自动解析日期时间。该变量应位于 api 服务器的本地时区。在本例中为欧洲/柏林。我预计时间(参考示例)为 2019-12-03:00:00:00。但这种情况并非如此。现在还有一小时休息时间。

但是当我发布以下内容时:

{
    "validate": "2019-12-02T23:00:00+00:00",
    "configuration": {},
    "sortId": 1
}
Run Code Online (Sandbox Code Playgroud)

解析为本地时区按预期进行。因为发布数据的客户端是用 JS 编写的,并使用默认的 Date.toISOString() 函数,所以我总是在结尾处得到一个“Z”。根据 ISO8601,这是完全没问题的。

timezone-offset asp.net-web-api asp.net-core asp.net-core-2.2

1
推荐指数
1
解决办法
1万
查看次数

如何获取 JS 中 YYYY-MM-DD 格式的第二天日期?

看起来是一个简单的问题,但是 JS 中所有时区的来龙去脉都让我很头疼。

基本上,如果我有一个如下所示的日期:

2018-04-06
Run Code Online (Sandbox Code Playgroud)

我希望能够获得第二天的日期:

2018-04-07
Run Code Online (Sandbox Code Playgroud)

我在 SO 上找到了以下代码片段来执行此操作(有点):

var date = new Date('2018-04-06');
date.setDate(date + 1);
Run Code Online (Sandbox Code Playgroud)

问题是我正在使用调整后的时区返回日期,并且因为我位于美国东部时间时区,所以它给我的日期减去五个小时,这实际上是我开始的同一天。

我已经浏览了无数的 SO 帖子,试图找到这个看似简单问题的答案,但对于任何给定的日期,无论用户位于哪个时区,如何以 YYYY-MM-DD 格式获取第二天的日期?谢谢。

javascript timezone date timezone-offset

1
推荐指数
1
解决办法
4501
查看次数

无法将包含 RFC3339 的时区偏移的字符串解析为时间,并出现看似矛盾的错误

我正在使用 Golang 和 time.Time 将给定字符串解析为时间对象。

使用 RFC3339,time.Parse这是我的代码示例:

t, err := time.Parse(time.RFC3339, "2020-08-08T00:22:44Z07:00")
if err != nil {
   return nil, err
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误。

当我包括时区偏移时,我得到:

ERRO[0002] parsing time "2020-08-08T00:22:44Z07:00": extra text: 07:00
Run Code Online (Sandbox Code Playgroud)

当我不包括时区偏移时,我得到:

ERRO[0002] parsing time "2020-08-08T00:15:36" as "2006-01-02T15:04:05Z07:00": cannot parse "" as "Z07:00"
Run Code Online (Sandbox Code Playgroud)

将时间解析为结构化对象时如何避免此问题?

time timezone parsing go timezone-offset

1
推荐指数
1
解决办法
2547
查看次数

这个 Swift TimeZone 作为另一个时区假设中日期的缩写有什么问题?

在具有以下 Swift 代码的 Xcode Playground 中,我得到了带注释的输出。给定 MST TimeZone 对象和该 MST TimeZone 的 MDT TimeZone 中的日期,我没有收到预期的 MDT TimeZone 缩写输出。我对此函数不了解什么,以及如何获得所需的输出,以找出给定日期在给定当前示例 MST 时区的两个可能时区中的哪一个?

// Daylight saving time (MDT) 2021 in Colorado began at 2:00 AM on Sunday, March 14
let mstDate = Date(timeIntervalSinceReferenceDate: 636327068) // "Mar 1, 2021 at 2:31 PM"
let mdtDate = Date(timeIntervalSinceReferenceDate: 637709468) // "Mar 17, 2021 at 3:31 PM"
let mstTimeZone = TimeZone(abbreviation: "MST")!
let mdtTimeZone = TimeZone(abbreviation: "MDT")!

mstTimeZone.abbreviation(for: mstDate) // expected MST, got MST
mstTimeZone.abbreviation(for: mdtDate) // …
Run Code Online (Sandbox Code Playgroud)

timezone date timezone-offset swift

1
推荐指数
1
解决办法
1074
查看次数

在 JavaScript 中获取任意时区的日期字符串的星期几的最佳方法是什么?

我试图在 JavaScript 中找到最好的方法,在仅给定日期字符串的情况下,获取任何时区中特定日期的星期几。

具体来说,如果我有一个日期字符串,例如:

2022-01-29
Run Code Online (Sandbox Code Playgroud)

我用该字符串在 JS 中创建一个新的 Date 对象,然后调用getDayDate 对象上的方法,因为我位于“America/New_York”时区,所以我实际上获得了前一天的星期几日期,而不是日期本身的星期几。

对于处于负 UTC 时间的时区(例如美国、加拿大等)的任何人来说,可以通过运行以下命令轻松地演示这一点:

new Date('2022-01-29').getDay()
Run Code Online (Sandbox Code Playgroud)

应该6在周六返回,但由于时区转换,我得到5了周五。

我发现“/sf/answers/2744688971/”,建议使用getTimezoneOffset以下方法:

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);
Run Code Online (Sandbox Code Playgroud)

这似乎确实有效,但有几点:

  1. SO 帖子建议- userTimezoneOffset在最后使用,但它只适用于我+ userTimezoneOffset。为什么?
  2. 该帖子的评论说它不适用于夏令时或所有时区,我不确定如何轻松确认这一点。在我最初的测试中,它似乎适用于 DST,但也许我遗漏了一些东西,无论哪种方式,我不确定如何在其他时区测试它。

当我只有日期字符串时,在 JavaScript 中获取星期几的最佳方法是什么?

javascript date dayofweek timezone-offset

1
推荐指数
1
解决办法
1402
查看次数

java.util.Timer 调度程序每天都会出错,因为夏令时

我下面的代码运行良好,该作业每天都会在正确的时间执行,但夏令时更改除外。它发生在十月底和三月。我的服务器有一个轻量级硬件,它位于使用它的区域。我如何才能使用最少的资源(没有石英或任何类似的资源)使其工作

// init daily scheduler 
final java.util.Timer timer = new java.util.Timer("MyTimer");
final String[] hourMinute = time.split(":");
final String hour = hourMinute[0];
final String minute = hourMinute[1];
String second = "0";
final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
calendar.set(Calendar.MINUTE, Integer.parseInt(minute));
calendar.set(Calendar.SECOND, Integer.parseInt(second));
if(calendar.getTime().before(new Date())){
    calendar.add(Calendar.DATE, 1);
}

timer.schedule(job, calendar.getTime(), 
TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS)); // period: 1 day
Run Code Online (Sandbox Code Playgroud)

java scheduler dst timezone-offset spring-boot

1
推荐指数
1
解决办法
912
查看次数