标签: dst

将UTC DateTime转换为另一个时区

我有一个来自数据库记录的UTC DateTime值.我还有一个用户指定的时区(TimeZoneInfo的一个实例).如何将UTC DateTime转换为用户的本地时区?另外,如何确定用户指定的时区当前是否正在观察夏令时?我正在使用.NET 3.5.

谢谢,马克

c# timezone datetime dst

32
推荐指数
4
解决办法
5万
查看次数

检查夏令时是否有效?

如何检查丹麦的白天时间节省是否已经生效,如果是,那么我的数据加1小时,否则不行?我有一个xml文件:

<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
Run Code Online (Sandbox Code Playgroud)

c# datetime dst windows-phone-7

31
推荐指数
3
解决办法
5万
查看次数

在C/C++中在本地时间和GMT/UTC之间转换

在C/C++中,在本地时间和UTC之间转换日期时间的最佳方法是什么?

"datetime"是指包含日期和时间的一些时间表示.我会很乐意用time_t,struct tm或任何其他的表示,使之成为可能.

我的平台是Linux.

这是我正在尝试解决的具体问题:我得到一对包含朱利安日期和一天中的秒数的值.这些值是格林威治标准时间.我需要将其转换为本地时区"YYYYMMDDHHMMSS"值.我知道如何将朱利安日期转换为YMD,显然很容易将秒转换为HHMMSS.然而,棘手的部分是时区转换.我相信我能找到解决方案,但我宁愿找到一种"标准"或"众所周知"的方式,而不是磕磕绊绊.


可能相关的问题是在C中获取时区的夏令时转换日期

c c++ timezone dst

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

当数据依赖于日期时间时,在数据库中保存日期时间和时区信息的最佳做法

关于在DB中保存日期时间和时区信息有很多问题,但总体水平更多.在这里,我想谈谈一个具体的案例.

系统规格

  • 我们有一个订单系统数据库
  • 这是一个多租户系统,租户可以使用任意时区(每个租户是任意的,但是单个时区,一次保存在租户表中,永不改变)

DB中需要涵盖业务规则

  • 当租户将订单放入系统时,订单编号将根据其本地日期时间计算(它不是字面上的数字,而是某种类型的标识符ORDR-13432-Year-Month-Day).精确计算目前并不重要,重要的是它取决于租户的本地日期时间
  • 我们还希望能够在系统级别上选择所有订单,放置在某些UTC日期时间之间,而不管租户如何(对于一般系统统计/报告)

我们最初的想法

  • 我们最初的想法是在整个数据库中保存UTC日期时间,当然,保持租户时区相对于UTC的偏移量,并且使用DB的应用程序总是将日期时间转换为UTC,以便DB本身始终使用UTC.

方法1

  • 保存当地租户的日期时间对每个租户来说都不错,但是我们遇到的问题包括:

    SELECT * FROM ORDERS WHERE OrderDateTime BETWEEN UTCDateTime1 AND UTCDateTime2
    
    Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为OrderDateTime在这个查询中意味着基于租户的不同时刻.当然,此查询可能包括连接到Tenants表以获取本地日期时间偏移量,然后将在运行中进行计算OrderDateTime以进行调整.这是可能的,但不确定这是否是一个好方法呢?

方法2

  • 另一方面,当保存UTC日期时间时,那么当我们计算OrderNumber时,因为UTC中的日/月/年可能与本地日期时间不同

让我们举一个极端的例子; 让我们说租户比UTC早6个小时,他的当地日期时间是2017-01-01 02:00.UTC会是2016-12-31 20:00.此时下达的订单应该获得OrderNumber 'ORDR-13432-2017-1-1'但是如果保存UTC则会得到ORDR-13432-2016-12-31.

在这种情况下,在DB中创建Order时,我们应该根据重新计算的租户本地时间获得UTC日期时间,租户偏移和编译OrderNumber,但仍然以UTC格式保存DateTime列.

问题

  1. 处理这种情况的首选方法是什么?
  2. 是否有一个很好的解决方案,保存UTC日期时间,因为系统级报告,这对我们来说会很好吗?
  3. 如果使用保存UTC,是方法2)处理这些情况的好方法还是有一些更好/推荐的方式?

[UPDATE]

根据Gerard Ashton和Hugo的评论:

如果租户可以改变时区,那么最初的问题就细节而言并不明确,如果政治当局改变时区属性或某个时区的时区会发生什么.当然,这是非常重要的,但它不是这个问题的核心.我们可以在另一个问题中解决这个问题.

为了这个问题,让我们假设租户不会改变位置.该位置的时区属性或时区本身可能会发生变化,这些更改将在系统中与此问题分开处理.

timezone datetime utc datetimeoffset dst

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

PHP夏令时检测

我需要在当地时间上午9:00向世界各地的用户发送电子邮件.服务器在英国.我能做的是在每个用户和服务器的时间之间设置一个时间差,如果DST不存在,这将完美地起作用.

这是一个例子来说明它:

  • John在纽约工作,距服务器(英国)时间约5小时
  • Richard在英国伦敦工作,与服务器有0小时的差异.

当服务器在特定星期日凌晨2:00从GMT转到GMT +1(BST)时,这意味着John现在具有-6H的时差.

这种情况下我仍然可以通过更新所有用户的服务器的本地时间之外处理,但一旦我前进/后退的所有其他用户的时候,我还需要一种方法来检测(时间和日期)的用户生活英国境外将(或不会)将当地时间改为可能的夏令时.

我需要一个PHP方法来了解/检测世界其他地方何时进入/退出夏令时.

php gmt dst binary-search-tree

28
推荐指数
3
解决办法
6万
查看次数

将unixtime转换为datetime对象然后再转换(转换为时间转换函数对)

我正在尝试编写一对函数,dt并且ut在正常的unix时间(自1970-01-01 00:00:00 UTC以来的秒数)和Python datetime对象之间来回转换.

如果dt并且ut是正确的反转,则此代码将打印两次相同的时间戳:

import time, datetime

# Convert a unix time u to a datetime object d, and vice versa
def dt(u): return datetime.datetime.fromtimestamp(u)
def ut(d): return time.mktime(d.timetuple())

u = 1004260000
print u, "-->", ut(dt(u))
Run Code Online (Sandbox Code Playgroud)

唉,第二个时间戳比第一个时间戳少3600秒(一小时).我认为这只发生在非常特殊的unixtimes上,也许在那个时间里,夏令时会跳过.但有没有办法写作dt,ut所以他们是彼此真正的逆转?

相关问题:使matplotlib的date2num和num2date完美反转

python time datetime date dst

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

Google电子表格中的时区转换

我知道这很简单.

在Google电子表格中,我有一个列,我在一个时区(GMT)中输入时间而另一列应该自动在另一个时区(太平洋时间)获取时间

 GMT      | PT
----------|------------
 5:00 AM  | 9:00 PM
Run Code Online (Sandbox Code Playgroud)

截至目前我正在使用

 =$C$3-time(8,0,0)
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我想更改夏令时的时间公式.

是否有任何可用的功能或脚本可以将夏令时自动计算.

timezone formulas google-sheets dst google-apps-script

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

在Javascript中使用时区和夏令时

我的单页javascript应用程序通过REST调用以JSON格式检索数据.使用标准ISO8601格式的UTC时区格式化日期,例如2011-02-04T19:31:09Z.

注册该服务时,用户从下拉列表中选择他们的时区.此时区可能与用户浏览器的时区不同.javascript应用程序始终知道用户选择的时区是什么.

我知道如何将UTC字符串转换为日期.我知道Javascript只代表当地时区的日期.

但是我遇到了麻烦,想知道如何显示为时区而不是用户的本地时区格式化的日期.它必须在所有日期考虑DST.在内部,我希望将所有日期作为UTC处理,并且仅在显示时转换为另一时区中日期的字符串表示.我需要在用户个人资料中选择的时区中显示日期,而不是浏览器的时区.

我已经尝试过服务器发送用户浏览器时区和用户配置文件时区之间的时区偏移差异(以毫秒为单位).但我发现我不能只发送一个偏移值,但需要为每个日期发送一个偏移量来解释夏令时的变化.

有关如何显示各种时区格式的日期的任何建议或示例代码?到目前为止我找到的选项:

  1. 服务器将日期作为已在正确时区格式化的字符串发送,并且不在客户端上进行日期解析或操作.这使得在客户端做某些事情很困难,如果不是不可能的话.
  2. 使用诸如https://github.com/mde/timezone-js之类的库,其中包括整个Olson TZ数据库到Javascript中.这意味着加载时间越长,内存使用量越多等.
  3. 使用发送到客户端的每个日期发送timezoneOffsetMillis值.这会导致混乱的JSON数据和非最佳REST接口.

有没有更简单或更好的解决方案?

javascript timezone datetime utc dst

22
推荐指数
1
解决办法
8482
查看次数

由于DST,Oracle日期比较已损坏

我们一直在调试从通过Hibernate运行Java的应用服务器执行的SQL查询的问题.错误:

[3/10/14 10:52:07:143 EDT] 0000a984 JDBCException W org.hibernate.util.JDBCExceptionReporter logExceptions SQL Error: 1878, SQLState: 22008
[3/10/14 10:52:07:144 EDT] 0000a984 JDBCException E org.hibernate.util.JDBCExceptionReporter logExceptions ORA-01878: specified field not found in datetime or interval
Run Code Online (Sandbox Code Playgroud)

我们已经能够将其缩小到下面的简单SQL.

select * 
from MY_TABLE T
where T.MY_TIMESTAMP >= (CURRENT_TIMESTAMP - interval '1' hour );
Run Code Online (Sandbox Code Playgroud)

当我们在同一个数据库中运行它时,我们得到错误:

ORA-01878: specified field not found in datetime or interval
01878. 00000 -  "specified field not found in datetime or interval"
*Cause:    The specified field was not found in the datetime or interval.
*Action: …
Run Code Online (Sandbox Code Playgroud)

oracle timezone timestamp dst

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

如何编写单元测试以确保我的基于日期/时间的代码适用于所有时区和/或DST?

我正在使用JodaTime 2.1,我正在寻找一种单元测试代码的模式,该代码执行日期/时间操作以确保它在所有时区都表现良好且独立于DST.

特别:

  1. 我怎么能模拟系统时钟(所以我不必模拟所有我调用的地方new DateTime()来获取当前时间)
  2. 如何在默认时区执行相同的操作?

java timezone unit-testing jodatime dst

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