相关疑难解决方法(0)

夏令时和时区最佳实践

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

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

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

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

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

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

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

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

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

timezone datetime utc datetimeoffset dst

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

在注册表中写入的Windows时区是否可靠?

我正在创建一个应该适用于多个时区的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

在此输入图像描述

我有几个问题

  • 我是否正确理解了重复规则?(这是MSDN所说的:https://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v = vs.85).aspx)
  • 是否存在关于多个时区的已知问题,尤其是"E.南美标准时间"?
  • 有没有理由为什么DST开始日期,显然每年定期发生,在第10个月的第3周,在第2周设定值?
  • 在Windows注册表中写入的时区是否可靠,如果没有,我应该使用Windows API的哪个功能来转换带有DST的时区,而不是使用与本地计算机上设置的时区不同的时区编写的日期?

注意我在发布此消息之前已经强烈验证了我从注册表中读取的数据是否正确.我很确定这不是这种类型的错误.

注意我正在使用Windows 7,但问题在Windows 10上保持不变

c++ time timezone date dst

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

存储时间戳,时间00:00:00

我想在时间组件中将时间戳存储在数据库中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)

将当前时间添加到日期,当我仅提供没有时间规范的日期时.
我需要这个,因为我需要从数据库中检索内部整数,这应该是一天的开始.

存储这个"一天开始"的最佳方法是什么?

php mysql datetime php-carbon

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

用于多时区应用程序的Java日历,日期和时间管理

我正在设计一个调度Web应用程序.我希望用户可以在几个不同的时区和区域设置中添加事件.挑战是正确呈现这些事件.

因此,作为一个例子:
如果用户在EST时区并且正在查看由另一个用户在PST中添加的网络研讨会事件,我想将事件的实际PST时间转换为查看者的本地时间.因此,如果事件安排在太平洋标准时间下午2点,那么它应显示为美国东部时间下午5点.

我还要小心,如果有数千个事件可能需要从实际事件时间转换到查看者的本地时间,性能不会受到影响.

所有的想法和意见都表示赞赏.
TIA

java timezone calendar date

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

你如何处理时区问题?

对于调度系统,将来自多个源移动,Web,客户端应用程序的中央服务器数据库中的客户端/事件的时区保存的最佳方法是什么.

  • 你如何存储日期?警报,提醒等......
  • 你如何处理夏令时设置?
  • 如果客户已经前往不同的地方,您如何处理事件?

我需要解决方案来处理标签中的所有数据库.

php mysql sqlite postgresql timezone

9
推荐指数
2
解决办法
763
查看次数

如何正确使用Timezone?

我正在阅读很多关于时区,偏移,utc,当地时间,javascript函数,DST,培根的内容,而我正试图将这些内容整合在一起,为我的应用程序构建一个可靠/正确的结构.

假设我的应用程序类似于StackOverflow.

这就是我在做的......

  • 服务器在另一个国家/地区,因此我将其设置为UTC 00:00.
  • 我把日期存储为DateTimeOffset.
  • 不是要存放TimeZoneID.
  • 日期以这种格式发送给客户:2012-07-19T14:30:00-03:00.
  • 我正在使用角度过滤器将其转换为当地时间.

我有几个问题......

1º服务器TimeZone?

关于我的服务器(单个服务器)......它应该以"中性"UTC(+00:00)运行吗?如果将来我们迁移到服务器在不同位置运行的服务器场,该怎么办?

2º我应该存储什么?

目前,我正在将日期存储为DateTimeOffset.我正在阅读关于保存的内容,TimeZoneID但我认为没有任何用处.我错过了什么吗?

或者我应该像DateTimeUtca 一样存储日期TimeZoneID并手动转换每个日期与TimeZone班级?

3º如何转换为当地时间?

在客户端上转换数据是否安全?或者日期转换应该始终在服务器端?

4º关于夏令时.

使用我目前的方法.DST会受到尊重吗?

javascript c# timezone utc datetimeoffset

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

如果未指定,XML Schema dateTime的默认时区是什么时候?

我正在尝试确定XML Schema dateTime的默认时区是什么,当它不是特定的时候.末尾的时区部分是可选的,可以省略:

2013-01-11T16:02:55
Run Code Online (Sandbox Code Playgroud)

我在这个答案中读到,未指定的时区未确定.我在这个问题的评论中读到,如果没有指定,默认为UTC.我还阅读了W3C的定义,并没有给出明确的答案.

任何专家都可以指出我指定的位置吗?

timezone datetime xsd

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

在C#中计算重复日期的正确方法

在我的项目中,我需要计算重复事件的日期.一开始我只有一个开始日期/时间以及该事件必须重复的信息:

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)

c# timezone datetime

6
推荐指数
2
解决办法
6445
查看次数

如何从用户日期和时区输入正确地在数据库中存储UTC日期?

我的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)

javascript timezone datetime

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

所有日期时间都存储在utc中

我正在构建ac#calendar应用程序并将所有日期时间存储在Microsoft SQL-Server DateTime2类型中.此数据类型可使用">","> ="等运算符进行搜索.

我现在已经阅读了有关该主题的更多信息,例如这些帖子:

夏令时和时区最佳实践

如何存储重复日期,记住夏令时

以UTC格式存储时间总是一个好主意,还是在本地时间存储更好?

我相信在使用UTC和处理不同的DST值时,尤其是在与未来重复事件相关时,我犯了一个错误.

我当前的实现适用于事件,直到重复序列超过DST时间更改.

我相信我现在需要存储当地时间,当地时区和可能的UTC时间

我应该如何构建我的数据库以及我应该使用哪些数据类型将数据存储在数据库中,该数据库将支持不同的客户端时区和DST值,同时还允许我查询指定的开始和停止日期时间范围内的匹配?

c# sql-server datetime utc web

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

标签 统计

timezone ×8

datetime ×6

c# ×3

utc ×3

date ×2

datetimeoffset ×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