我有一个来自数据库记录的UTC DateTime值.我还有一个用户指定的时区(TimeZoneInfo的一个实例).如何将UTC DateTime转换为用户的本地时区?另外,如何确定用户指定的时区当前是否正在观察夏令时?我正在使用.NET 3.5.
谢谢,马克
如何检查丹麦的白天时间节省是否已经生效,如果是,那么我的数据加1小时,否则不行?我有一个xml文件:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
Run Code Online (Sandbox Code Playgroud) 在C/C++中,在本地时间和UTC之间转换日期时间的最佳方法是什么?
"datetime"是指包含日期和时间的一些时间表示.我会很乐意用time_t
,struct tm
或任何其他的表示,使之成为可能.
我的平台是Linux.
这是我正在尝试解决的具体问题:我得到一对包含朱利安日期和一天中的秒数的值.这些值是格林威治标准时间.我需要将其转换为本地时区"YYYYMMDDHHMMSS"值.我知道如何将朱利安日期转换为YMD,显然很容易将秒转换为HHMMSS.然而,棘手的部分是时区转换.我相信我能找到解决方案,但我宁愿找到一种"标准"或"众所周知"的方式,而不是磕磕绊绊.
可能相关的问题是在C中获取时区的夏令时转换日期
关于在DB中保存日期时间和时区信息有很多问题,但总体水平更多.在这里,我想谈谈一个具体的案例.
系统规格
DB中需要涵盖业务规则
ORDR-13432-Year-Month-Day
).精确计算目前并不重要,重要的是它取决于租户的本地日期时间我们最初的想法
方法1
保存当地租户的日期时间对每个租户来说都不错,但是我们遇到的问题包括:
SELECT * FROM ORDERS WHERE OrderDateTime BETWEEN UTCDateTime1 AND UTCDateTime2
Run Code Online (Sandbox Code Playgroud)这是有问题的,因为OrderDateTime
在这个查询中意味着基于租户的不同时刻.当然,此查询可能包括连接到Tenants
表以获取本地日期时间偏移量,然后将在运行中进行计算OrderDateTime
以进行调整.这是可能的,但不确定这是否是一个好方法呢?
方法2
让我们举一个极端的例子; 让我们说租户比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列.
问题
[UPDATE]
根据Gerard Ashton和Hugo的评论:
如果租户可以改变时区,那么最初的问题就细节而言并不明确,如果政治当局改变时区属性或某个时区的时区会发生什么.当然,这是非常重要的,但它不是这个问题的核心.我们可以在另一个问题中解决这个问题.
为了这个问题,让我们假设租户不会改变位置.该位置的时区属性或时区本身可能会发生变化,这些更改将在系统中与此问题分开处理.
我需要在当地时间上午9:00向世界各地的用户发送电子邮件.服务器在英国.我能做的是在每个用户和服务器的时间之间设置一个时间差,如果DST不存在,这将完美地起作用.
这是一个例子来说明它:
当服务器在特定星期日凌晨2:00从GMT转到GMT +1(BST)时,这意味着John现在具有-6H的时差.
这种情况下我仍然可以通过更新所有用户的服务器的本地时间之外处理,但一旦我前进/后退的所有其他用户的时候,我还需要一种方法来检测时(时间和日期)的用户生活英国境外将(或不会)将当地时间改为可能的夏令时.
我需要一个PHP方法来了解/检测世界其他地方何时进入/退出夏令时.
我正在尝试编写一对函数,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
所以他们是彼此真正的逆转?
我知道这很简单.
在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)
这里的问题是,我想更改夏令时的时间公式.
是否有任何可用的功能或脚本可以将夏令时自动计算.
我的单页javascript应用程序通过REST调用以JSON格式检索数据.使用标准ISO8601格式的UTC时区格式化日期,例如2011-02-04T19:31:09Z
.
注册该服务时,用户从下拉列表中选择他们的时区.此时区可能与用户浏览器的时区不同.javascript应用程序始终知道用户选择的时区是什么.
我知道如何将UTC字符串转换为日期.我知道Javascript只代表当地时区的日期.
但是我遇到了麻烦,想知道如何显示为时区而不是用户的本地时区格式化的日期.它必须在所有日期考虑DST.在内部,我希望将所有日期作为UTC处理,并且仅在显示时转换为另一时区中日期的字符串表示.我需要在用户个人资料中选择的时区中显示日期,而不是浏览器的时区.
我已经尝试过服务器发送用户浏览器时区和用户配置文件时区之间的时区偏移差异(以毫秒为单位).但我发现我不能只发送一个偏移值,但需要为每个日期发送一个偏移量来解释夏令时的变化.
有关如何显示各种时区格式的日期的任何建议或示例代码?到目前为止我找到的选项:
有没有更简单或更好的解决方案?
我们一直在调试从通过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) 我正在使用JodaTime 2.1,我正在寻找一种单元测试代码的模式,该代码执行日期/时间操作以确保它在所有时区都表现良好且独立于DST.
特别:
new DateTime()
来获取当前时间)