相关疑难解决方法(0)

夏令时和时区最佳实践

我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.

如果您有任何要添加的内容,请执行此操作

许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.

例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.

  • 你是如何处理夏令时问题的?
  • 您的解决方案中有哪些假设?(在这里寻找背景)

同样重要的是,如果不是这样的话:

  • 你尝试了哪些不起作用?
  • 为什么不起作用?

我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.

一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.

timezone datetime utc datetimeoffset dst

2021
推荐指数
20
解决办法
40万
查看次数

如何将JavaScript日期初始化为特定时区

我将特定时区的日期时间作为字符串,我想将其转换为本地时间.但是,我不知道如何在Date对象中设置时区.

例如,Feb 28 2013 7:00 PM ET,我可以

var mydate = new Date();
mydate.setFullYear(2013);
mydate.setMonth(02);
mydate.setDate(28);
mydate.setHours(7);
mydate.setMinutes(00);  
Run Code Online (Sandbox Code Playgroud)

据我所知,我可以设置UTC时间或本地时间.但是,我如何在另一个时区设置时间?

我试图使用添加/减去UTC的偏移量,但我不知道如何应对夏令时.我不确定我是否正朝着正确的方向前进.

如何在javascript中将时间从不同的时区转换为当地时间?

javascript timezone

176
推荐指数
8
解决办法
23万
查看次数

Date.toLocaleString()的Chrome timeZone选项

我最近发现JavaScript有一个新的扩展.这增加了一些功能,可以在Date对象中toLocaleString,toLocaleDateStringtoLocaleTimeString功能. 参考这里.

我对timeZone支持IANA/Olson时区的选项特别感兴趣,例如America/New_YorkEurope/London. 目前仅在Google Chrome中支持此功能.

以前的建议是,要使用除UTC或您自己的本地时区之外的任何其他时区的JavaScript,必须使用库.但现在,它似乎开始直接纳入浏览器.所以现在你可以这样做:

new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

// output: "7/4/2013 5:15:45 PM"
Run Code Online (Sandbox Code Playgroud)

要么:

new Date().toLocaleString("en-NZ", {timeZone: "Pacific/Chatham",
                                    timeZoneName: "long"})

// output:  "7/5/2013 9:59:52 AM GMT+12:45"
Run Code Online (Sandbox Code Playgroud)

要么:

new Date().toLocaleString("en-GB", {timeZone: "Europe/London",
                                    timeZoneName: "short"})

// output:  "4/7/2013 22:18:57 United Kingdom Time"
// (strange time zone name, but ok)
Run Code Online (Sandbox Code Playgroud)

这是非常酷,但我有几个问题:

  • 这是新标准的一部分吗?也许埋在ECMAScript 6的某个地方?或者它只是Chrome的自定义内容?
  • 为何只使用Google Chrome?它在其他地方是否受支持?是否有计划在其他任何地方支持它?
  • 我检查了使用Chrome的JavaScript运行时的node.js,但它在那里不起作用.为什么不?
  • 时区数据是否可以通过我列出的功能以外的任何其他方式访问?如果仅在格式化字符串时可用,则根据结果进行任何计算可能很困难.
  • 这主要关注输出,但我如何将其用于输入?有没有办法将构造函数中的时区传递给Date …

javascript timezone google-chrome internationalization ecmascript-intl

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

如何跨时区正确转换时间?

假设美国加州的用户选择了日期,时间和时区:

全球啤酒马拉松将于2013年815日上午10:00开始,UTC-08:00

中欧的另一个用户打开显示此日期和时间的页面.他不想做时间计算(已经喝了很少的啤酒).他只是想看看这个日期和时间:

2013年8月15日19:00

鉴于浏览器收到加州用户输入的日期和时间信息:

有没有办法在javascript没有外部Web服务来进行正确的转换?也就是说,要检测到UTC时间上午10点UTC-08:00实际上应该是UTC-07:00上午10点,因为它是夏令时.

也许我从一开始就对此有了错误的理解,但我不想让进入的用户考虑是否应该选择UTC-08:00(太平洋标准时间)或UTC-07:00(PDT).我假设由于CA中的标准时区是PST,人们不会在夏天转向思考PDT.或者他们?!

在中欧,标准日期为UTC + 01:00,夏令时为UTC + 02:00.因此,CA和欧洲之间的差异应该是9小时,除了一年中的两个时段,当一个或另一个区域在标准和夏令时模式之间切换时.

更新:

经过一番思考和阅读评论后,我理想需要的是:

var utcOffset = f('2013-08-15T10:00', 'America/Los_Angeles');
// utcOffset == "-07:00"
var utcOffset = f('2013-11-15T10:00', 'America/Los_Angeles');
// utcOffset == "-08:00"
Run Code Online (Sandbox Code Playgroud)

到目前为止,看起来像Guido Preite建议的moment.js/timezone插件能够做到这一点(或多或少).

还有其他任何方式,使用浏览器API?

javascript timezone datetime date timezone-offset

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

全局转换UTC DateTimes到用户指定的本地DateTimes

我将所有DateTime字段存储为UTC时间.当用户请求网页时,我想采用他首选的本地时区(而不是服务器计算机的本地时区)并自动将所有Web表单中的所有DateTime字段显示为本地日期.

当然,我可以在每个表单中的每个DateTime.ToString()调用上应用转换,或者实现一些帮助程序实用程序但是这是一个耗时的任务,并且还有一些第三方组件使用自定义DateTime显示模板进行配置很棘手.

基本上,我想使DateTime类的行为如下:

from this moment on for this web request, 
whenever some code calls DateTime.ToString(), convert it to the local time 
        using the timezone offset given at the very beginning of the web request, 
but if possible, please keep .NET core library DateTime.ToString() calls intact 
       (I don't want to mess up event logging timestamps etc.)
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

顺便说一下,我使用的是ASP.NET MVC 4,如果重要的话.

c# datetime utc localtime

13
推荐指数
2
解决办法
9367
查看次数

使用JavaScript在一个特定时区内抵消DST的时间

如果它目前在太平洋时区的DST,我需要将时间抵消一个小时.无论用户的当地时区如何,我如何确定太平洋时区的当前夏令时状态?

这是我到目前为止所拥有的.第4行中的"dst"只是一个函数的占位符,它可以告诉我该区域的夏令时是否有效.

function checkTime() {  
    var d = new Date();  
    var hour = d.getUTCHours();  
    var offset = dst ? 7 : 8; // is pacific time currently in daylight savings?

    // is it currently 6 AM, 2 PM, or 10 PM?
    if (hour === ((6 + offset) % 24) || hour === ((14 + offset) % 24) || hour === ((22 + offset) % 24)) {  
      // do stuff
    }
}

checkTime();
Run Code Online (Sandbox Code Playgroud)

javascript timezone dst

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

1942年2月9日 - 1945年9月30日之间的Javascript timezone bug

我有一个日期,从1943年1月13日上午4:00 UTC.它被Javascript转换为1943年1月12日美国东部时间晚上11点(GMT-500).然而,根据美国的Day Light Savings时间历史,1942年2月9日至1945年9月30日之间的时期是DST.我的服务器通过GMT-400或4:00 AM UTC正确地将日期插入数据库.但是,Javascript似乎假设11月1日到3月8日之间的日期总是GMT-500,无论年份如何.因此,我们会在这些时段之间的某些日期出现舍入错误.任何人都可以确认这是Javascript的时区的问题吗?

javascript datetime dst

7
推荐指数
0
解决办法
42
查看次数

javascript似乎使用Firefox向后使用时区

我在Firefox(版本21)的控制台中运行以下内容,我得到了我不期望的结果.

new Date(1362891600000);

var date = new Date(1362891600000);
var time = date.getHours();
new Date(date.setHours(date.getHours() + 24));
Run Code Online (Sandbox Code Playgroud)

结果真的让我失去了一个循环.

第一个日期显示为东部夏令时,而第二个日期显示为东部标准时间.这完全倒退了.IE或Chrome不会发生这种情况.

这里发生了什么? 在此输入图像描述

javascript datetime dst

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