我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
假设您网站的用户输入了日期范围.
2009-1-1 to 2009-1-3
Run Code Online (Sandbox Code Playgroud)
您需要将此日期发送到服务器进行某些处理,但服务器希望所有日期和时间都是UTC.
现在假设用户在阿拉斯加或夏威夷或斐济.由于它们处于与UTC完全不同的时区,因此需要将日期范围转换为如下所示:
2009-1-1T8:00:00 to 2009-1-4T7:59:59
Run Code Online (Sandbox Code Playgroud)
使用JavaScript Date对象,您如何将第一个"本地化"日期范围转换为服务器将理解的内容?
从服务器我得到这种格式的datetime变量:6/29/2011 4:52:48 PM它是UTC时间.我想使用JavaScript将其转换为当前用户的浏览器时间.
如何使用JavaScript或jQuery完成此操作?
我们正在为Web服务客户端开发一个C#应用程序.这将在Windows XP PC上运行.
Web服务返回的字段之一是DateTime字段.服务器返回GMT格式的字段,即最后带有"Z".
但是,我们发现.NET似乎做了某种隐式转换,时间总是12小时.
以下代码示例在一定程度上解决了这个问题,因为12小时的差异已经消失,但它不允许新西兰夏令时.
CultureInfo ci = new CultureInfo("en-NZ");
string date = "Web service date".ToString("R", ci);
DateTime convertedDate = DateTime.Parse(date);
Run Code Online (Sandbox Code Playgroud)
根据这个日期网站:
UTC/GMT抵消
标准时区:UTC/GMT +12小时
夏令时:+ 1小时
当前时区偏移:UTC/GMT +13小时
我们如何调整额外的小时?这可以通过编程方式完成,还是PC上的某种设置?
如何将本地时间的日期时间字符串转换为UTC时间的字符串?
我确定我以前做过这个,但找不到它,所以希望能帮助我(以及其他人)在将来做到这一点.
澄清:例如,如果我2008-09-17 14:02:00在我的本地时区(+10)中,我想生成一个具有相同UTC时间的字符串:2008-09-17 04:02:00.
此外,请访问http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/,请注意,一般情况下这不可能与DST和其他问题一样,因此从当地时间到UTC时间.
我正在处理Python中的日期,我需要将它们转换为UTC时间戳,以便在Javascript中使用.以下代码不起作用:
>>> d = datetime.date(2011,01,01)
>>> datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple()))
datetime.datetime(2010, 12, 31, 23, 0)
Run Code Online (Sandbox Code Playgroud)
将日期对象首先转换为datetime也无济于事.我试过这个链接的例子,但是:
from pytz import utc, timezone
from datetime import datetime
from time import mktime
input_date = datetime(year=2011, month=1, day=15)
Run Code Online (Sandbox Code Playgroud)
现在要么:
mktime(utc.localize(input_date).utctimetuple())
Run Code Online (Sandbox Code Playgroud)
要么
mktime(timezone('US/Eastern').localize(input_date).utctimetuple())
Run Code Online (Sandbox Code Playgroud)
确实有效.
所以一般的问题:如何根据UTC获得自纪元以来转换为秒的日期?
我现在一直在与此斗争.我正在尝试将纪元转换为日期对象.这个时代以UTC的形式发送给我.每当你通过new Date()一个时代,它就会认为它是本地的时代.我尝试创建一个UTC对象,然后使用setTime()它调整到适当的纪元,但唯一有用的方法是toUTCString()和字符串不能帮助我.如果我将该字符串传递给新的日期,它应该注意到它是UTC,但事实并非如此.
new Date( new Date().toUTCString() ).toLocaleString()
Run Code Online (Sandbox Code Playgroud)
我的下一次尝试是尝试获取当地当前时期和UTC当前时期之间的差异,但我也无法得到它.
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
Run Code Online (Sandbox Code Playgroud)
它只给了我很小的差异,低于1000,这是毫秒.
有什么建议?
我从来没有把时间转换成UTC.最近有一个请求要让我的应用程序能够识别时区,而且我一直在圈子里跑.关于将本地时间转换为UTC的大量信息,我发现它相当基本(也许我也做错了),但我找不到任何有关将UTC时间轻松转换为最终用户时区的信息.
简而言之,Android应用程序向我发送(appengine app)数据,在该数据中是一个时间戳.要将时间戳存储到我正在使用的时间:
datetime.utcfromtimestamp(timestamp)
Run Code Online (Sandbox Code Playgroud)
这似乎有效.当我的应用程序存储数据时,它将提前5小时存储(我是EST -5)
数据存储在appengine的BigTable上,当检索到它时,它就像一个字符串一样:
"2011-01-21 02:37:21"
Run Code Online (Sandbox Code Playgroud)
如何在用户正确的时区将此字符串转换为DateTime?
此外,用户时区信息的推荐存储是什么?(你怎么通常存储TZ信息,即:"-5:00"或"EST"等等等等),我敢肯定的答案,我的第一个问题可能包含一个参数的回答第二个.
我有一段时间在UTC,从那里我想要自纪元以来的秒数.
我使用strftime将其转换为秒数.以2012年4月1日为例.
>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'
Run Code Online (Sandbox Code Playgroud)
2012年4月1日UTC的纪元是1333238400但是这个上面返回1333234800,相差1小时.
所以看起来strftime正在考虑我的系统时间并在某个地方应用时区转换.我以为datetime纯粹是天真的?
我怎么能绕过那个?如果可能的话,避免导入其他库,除非标准.(我有可移植性问题).
在编写Web应用程序时,将(服务器端)所有日期时间存储在数据库中作为UTC时间戳是有意义的.
当我发现你无法在JavaScript中进行时区操作时,我感到非常惊讶.
我稍微扩展了Date对象.这个功能有意义吗?基本上,每次我向服务器发送任何内容时,它都将是使用此功能格式化的时间戳...
你能看到这里有什么重大问题吗?或者从不同角度解决问题?
Date.prototype.getUTCTime = function(){
return new Date(
this.getUTCFullYear(),
this.getUTCMonth(),
this.getUTCDate(),
this.getUTCHours(),
this.getUTCMinutes(),
this.getUTCSeconds()
).getTime();
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点令人费解.而且我对表现也不太确定.