我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
目前,我们有一种以TimeZone感知方式处理.net DateTimes的标准方法:每当我们生成一个DateTimeUTC时(例如使用DateTime.UtcNow),每当我们显示一个时,我们就会从UTC转换回用户的本地时间.
这工作正常,但我一直在阅读DateTimeOffset它如何捕获对象本身的本地和UTC时间.所以问题是,使用DateTimeOffsetvs我们已经做的事情有什么好处?
我通常有一个"拦截器",它在从/向数据库读取/写入之前进行DateTime转换(从UTC到本地时间,从本地时间到UTC),因此我可以DateTime.Now在整个系统中使用(派生和比较)而不用担心关于时区.
关于计算机之间的序列化和移动数据,没有必要打扰,因为日期时间始终是UTC.
我应该继续以UTC格式存储我的日期(SQL 2008 - datetime)还是应该使用DateTimeOffset(SQL 2008-datetimeoffset)存储它?
数据库中的UTC日期(日期时间类型)已经工作并且已知很长时间了,为什么要更改它?有什么好处?
我已经看过像这样的文章了,但我并不是100%相信.有什么想法吗?
我正在尝试使用DateTimeOffset来传达任何时区的特定时刻.我无法弄清楚如何使用TimeZoneInfo来处理夏令时.
var dt = DateTime.UtcNow;
Console.WriteLine(dt.ToLocalTime());
var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
Console.WriteLine(utcOffset.ToOffset(tz.BaseUtcOffset));
Run Code Online (Sandbox Code Playgroud)
打印出:
6/2/2010 4:37:19 PM 6/2/2010 3:37:19 PM -06:00
我在中央时区,而且我们目前正处于夏令时.我想把第二行读到:
6/2/2010 4:37:19 PM -05:00
BaseUtcOffset显然不会根据DST进行更改.
如何使用正确的偏移值获得正确的时间?
我正在尝试从Drupal CMS中取出一个日期对象,减去一天并打印出两个日期.这就是我所拥有的
$date_raw = $messagenode->field_message_date[0]['value'];
print($date_raw);
//this gives me the following string: 2011-04-24T00:00:00
$date_object = date_create($date_raw);
$next_date_object = date_modify($date_object,'-1 day');
print('First Date ' . date_format($date_object,'Y-m-d'));
//this gives me the correctly formatted string '2011-04-24'
print('Next Date ' . date_format($next_date_object,'Y-m-d'));
//this gives me nothing. The output here is always blank
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么原始日期对象出来很好,但后来我试图创建一个额外的日期对象并通过减去一天来修改它,似乎我不能那样做.输出总是空白.
我有一个Java类,它接收位置的纬度/经度,并在夏令时开启和关闭时返回GMT偏移.我正在寻找一种简单的方法来确定Java当前日期是否为夏令时,因此我可以应用正确的偏移量.目前我只对美国时区执行此计算,但最终我还希望将其扩展到全球时区.
几个月前,我被介绍到新型DateTimeOffset,很高兴DateTime关于时区的缺陷终于得到了解决.
但是,我想知道使用这种新类型是否有任何开销或问题.
我在一个多语言环境的Web应用程序上工作.有没有人知道任何可以影响我的东西,只是在我的所有日期/时间工作中使用它?这里有滥用的窗口吗?
参考:DateTimeOffset:Justin Van Patten在.NET 3.5中的一个新的DateTime结构
我希望将具有DATETIMEOFFSET字段的表转换为字段,DATETIME但通过注意偏移重新计算时间.实际上,这会将值转换为UTC.
例如.
CreatedOn: 2008-12-19 17:30:09.0000000 +11:00
Run Code Online (Sandbox Code Playgroud)
将被转换为
CreatedOn: 2008-12-19 06:30:09.0000000
Run Code Online (Sandbox Code Playgroud)
要么
CreatedOn: 2008-12-19 06:30:09.0000000 + 00:00 -- that's a `DATETIMEOFFSET`, but `UTC`.
Run Code Online (Sandbox Code Playgroud)
干杯:)
a DateTime和DateTimeOffset对象有什么区别?
什么时候应该使用每一个?
在可能更改服务器区域的Web应用程序中,存储日期和时间.哪一个更好,还是有其他建议?
我很困惑pandas如何用这些行吹出日期时间对象的界限:
import pandas as pd
BOMoffset = pd.tseries.offsets.MonthBegin()
# here some code sets the all_treatments dataframe and the newrowix, micolix, mocolix counters
all_treatments.iloc[newrowix,micolix] = BOMoffset.rollforward(all_treatments.iloc[i,micolix] + pd.tseries.offsets.DateOffset(months = x))
all_treatments.iloc[newrowix,mocolix] = BOMoffset.rollforward(all_treatments.iloc[newrowix,micolix]+ pd.tseries.offsets.DateOffset(months = 1))
Run Code Online (Sandbox Code Playgroud)
这all_treatments.iloc[i,micolix]是一个日期时间设置pd.to_datetime(all_treatments['INDATUMA'], errors='coerce',format='%Y%m%d'),并且INDATUMA是格式中的日期信息20070125.
这个逻辑似乎适用于模拟数据(没有错误,日期有意义),所以目前我无法在我的整个数据失败时重现,并出现以下错误:
pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2262-05-01 00:00:00
Run Code Online (Sandbox Code Playgroud)