我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
我正在创建一个应该适用于多个时区的c ++项目.应用程序接收带有参考时区的事件,并在当地时区以正确的小时以图形方式向用户显示此事件.例如,在柏林工作的用户收到在东京写的活动.来自东京的事件首先在UTC时间转换,然后从UTC重新转换为柏林的计算机当地时间,最后在他的图形界面上向用户显示.
要将UTC转换为本地计算机时间,我可以使用Windows API的多个功能来完成这项工作.但是为了将时间从另一个时区转换为UTC,我需要从Windows注册表中获取时区信息.
现在一些时区也需要考虑夏令时.我可以毫无问题地从Windows信息创建重复规则.但是我注意到DST应该发生的那天有时候在几个时区都是不正确的.例如,"E.南美标准时间".随着Windows提供的重复发生,DST开始日期提前1周开始.
如果我理解正确,Windows为此特定时区返回的重复规则表示"每年,第2个月,在该月的第2周".但是,此规则很少与互联网上发布的更改时间的正确日期相匹配,而如果规则是"每年,第2个月,在该月的第3周",则日期都是正确的.此外,正如您在提供的屏幕截图中看到的那样,Windows注册表数据显示DST开始时间为2周(以蓝色突出显示),但DST结束时间为3周(以红色显示),这是由我的代码正确计算的.可以在此处找到数据内容的描述:http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v = vs.85).aspx
我有几个问题
注意我在发布此消息之前已经强烈验证了我从注册表中读取的数据是否正确.我很确定这不是这种类型的错误.
注意我正在使用Windows 7,但问题在Windows 10上保持不变
我想在时间组件中将时间戳存储在数据库中00:00:00.
以下代码:
$start_date = Carbon::createFromFormat('d-m-Y', $date_interval["start_date"]);
$end_date = Carbon::createFromFormat('d-m-Y', $date_interval["end_date"]);
Run Code Online (Sandbox Code Playgroud)
将当前时间添加到日期,当我仅提供没有时间规范的日期时.
我需要这个,因为我需要从数据库中检索内部整数,这应该是一天的开始.
存储这个"一天开始"的最佳方法是什么?
我正在设计一个调度Web应用程序.我希望用户可以在几个不同的时区和区域设置中添加事件.挑战是正确呈现这些事件.
因此,作为一个例子:
如果用户在EST时区并且正在查看由另一个用户在PST中添加的网络研讨会事件,我想将事件的实际PST时间转换为查看者的本地时间.因此,如果事件安排在太平洋标准时间下午2点,那么它应显示为美国东部时间下午5点.
我还要小心,如果有数千个事件可能需要从实际事件时间转换到查看者的本地时间,性能不会受到影响.
所有的想法和意见都表示赞赏.
TIA
对于调度系统,将来自多个源移动,Web,客户端应用程序的中央服务器数据库中的客户端/事件的时区保存的最佳方法是什么.
我需要解决方案来处理标签中的所有数据库.
我正在阅读很多关于时区,偏移,utc,当地时间,javascript函数,DST,培根的内容,而我正试图将这些内容整合在一起,为我的应用程序构建一个可靠/正确的结构.
假设我的应用程序类似于StackOverflow.
这就是我在做的......
DateTimeOffset.TimeZoneID.2012-07-19T14:30:00-03:00.我有几个问题......
关于我的服务器(单个服务器)......它应该以"中性"UTC(+00:00)运行吗?如果将来我们迁移到服务器在不同位置运行的服务器场,该怎么办?
目前,我正在将日期存储为DateTimeOffset.我正在阅读关于保存的内容,TimeZoneID但我认为没有任何用处.我错过了什么吗?
或者我应该像DateTimeUtca 一样存储日期TimeZoneID并手动转换每个日期与TimeZone班级?
在客户端上转换数据是否安全?或者日期转换应该始终在服务器端?
使用我目前的方法.DST会受到尊重吗?
我正在尝试确定XML Schema dateTime的默认时区是什么,当它不是特定的时候.末尾的时区部分是可选的,可以省略:
2013-01-11T16:02:55
Run Code Online (Sandbox Code Playgroud)
我在这个答案中读到,未指定的时区未确定.我在这个问题的评论中读到,如果没有指定,默认为UTC.我还阅读了W3C的定义,并没有给出明确的答案.
任何专家都可以指出我指定的位置吗?
在我的项目中,我需要计算重复事件的日期.一开始我只有一个开始日期/时间以及该事件必须重复的信息:
Every Day
Every Week
Every 2 Weeks
Every 3 Weeks
Every Month
Every 2 Months
...
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?它应该可以正常使用不同的时区和日节省时间设置.我想我应该在本地DateTime中添加几天/几周/月,然后将其转换为UTC.但我不确定这一点.如果我添加几天会发生什么,这将是我们需要向前调整我们的时钟一小时的时间.在这种情况下,此时间不存在.
下面是我写的代码,但我不确定它在每种情况下都能正常工作:
private static List<DateTime> FindOccurrences(DateTime localStart, Repeat repeat, int occurrences)
{
var result = new List<DateTime> { localStart };
switch (repeat)
{
case Repeat.Daily:
for (int i = 1; i <= occurrences; i++)
result.Add(localStart.AddDays(i));
break;
case Repeat.Every2Weeks:
for (int i = 1; i <= occurrences; i++)
result.Add(localStart.AddDays((7 * 2) * i));
break;
...
}
return result;
}
public List<Event> CreateRepeating(string timeZone, Repeat …Run Code Online (Sandbox Code Playgroud) 我的JavaScript应用程序必须创建事件,并将其作为UTC存储在数据库中,以便事后可以在3个不同的时区中显示它们。
我发现很难弄清楚的棘手部分是,在创建事件时,用户必须选择时区以及日期。
这个想法是:-用户从带有时区的其他下拉列表中选择日期+所需时区。-我将UTC存储在数据库中-所有用户在3个不同的时区中看到日期。
您可能会问为什么在选择带有日期选择器的日期时,默认情况下任何人都需要其他下拉列表来选择另一个时区。
例子:让美国公民吉姆(Jim)在美国东部时间(EDT)华盛顿时间安排他的一生。他正在访问中国,进入一家中国网吧,并希望使用此应用来计划活动。日期选择器将选择本地时区,即中国标准时间。但是Jim希望通过EDT进行计划,并确保该应用程序能够正确处理所有事情。
因此,他必须专门从其他下拉列表中选择所需的时区。
所以我的问题是。因为我允许用户选择所需的时区,所以我首先必须将用户输入的日期转换为该时区,然后再将其转换为UTC,然后再进行存储吗?还是在将事件保存到数据库时对时区转换完全不感兴趣?
那么哪一步是正确的:-获取本地日期+所选时区-将本地日期转换为用户所选时区-将日期转换为UTC-存储到数据库-读取时,使用所选时区转换为3个时区
或-获取本地日期+所选时区-将日期转换为UTC,不考虑时区-存储到数据库-读取时,使用所选时区转换为3个时区
稍后编辑-我在流星中执行此操作,因此是javascript服务器端。DB是mongodb,因此出于性能原因,日期必须另存为JS日期对象(当然是utc)。
第二次编辑
下面是我尝试过的实现(如我输入事件日期07:00 AM KST,输出从数据库读回并在该KST时区转换回的最终结果时,除07:00之外,它不起作用上午)
一切都从这里开始-这是一种服务器端方法,它从日期选择器中读取日期,从时间选择器中读取时间,并从下拉列表中读取时区:
var pStartDate = GetDateAndTimeFromPostData(eventAttributes.startDate, eventAttributes.startTime, eventAttributes.timezone);
Run Code Online (Sandbox Code Playgroud)
在这里,我尝试从不同的控件(datepicker,timepicker,时区ddl)构建所选日期:
function GetDateAndTimeFromPostData(dt, tm, timezone)
{
var t = tm.split(":");
var hour = t[0];
var min = t[1];
var finalDate = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate(), hour, min);
var utcConverted = ConvertUserTimezoneToServerTimezone(finalDate, timezone);
return utcConverted;
}
Run Code Online (Sandbox Code Playgroud)
在这里我尝试时区转换:
function ConvertUserTimezoneToServerTimezone(dateToConvert, tz)
{
var userTimezonedDate;
switch(tz)
{
case "EDT":
{
userTimezonedDate = moment.tz(dateToConvert, "America/New_York");
break;
}
case "CEST":
{
userTimezonedDate = moment.tz(dateToConvert, …Run Code Online (Sandbox Code Playgroud) 我正在构建ac#calendar应用程序并将所有日期时间存储在Microsoft SQL-Server DateTime2类型中.此数据类型可使用">","> ="等运算符进行搜索.
我现在已经阅读了有关该主题的更多信息,例如这些帖子:
以UTC格式存储时间总是一个好主意,还是在本地时间存储更好?
我相信在使用UTC和处理不同的DST值时,尤其是在与未来重复事件相关时,我犯了一个错误.
我当前的实现适用于事件,直到重复序列超过DST时间更改.
我相信我现在需要存储当地时间,当地时区和可能的UTC时间
我应该如何构建我的数据库以及我应该使用哪些数据类型将数据存储在数据库中,该数据库将支持不同的客户端时区和DST值,同时还允许我查询指定的开始和停止日期时间范围内的匹配?
timezone ×8
datetime ×6
c# ×3
utc ×3
date ×2
dst ×2
javascript ×2
mysql ×2
php ×2
c++ ×1
calendar ×1
java ×1
php-carbon ×1
postgresql ×1
sql-server ×1
sqlite ×1
time ×1
web ×1
xsd ×1