当我创建一个新Date对象时,它会初始化为当前时间但在本地时区.如何获得GMT中的当前日期和时间?
在一台服务器上,当我运行时:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
在另一台服务器上
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud) 我正在使用美国/纽约时区.在秋天,我们"退回"一小时 - 在凌晨2点有效地"获得"一小时.在转换点,会发生以下情况:
它是01:59:00 -04:00
然后1分钟后变成:01 :00:
00-05 :00
因此,如果您只是简单地说"凌晨1点30分",那么您是指第一次1:30滚动还是第二次推测是不明确的.我正在尝试将调度数据保存到MySQL数据库,无法确定如何正确保存时间.
这是问题:
"2009-11-01 00:30:00"在内部存储为2009-11-01 00:30:00 -04:00
"2009-11-01 01:30:00"在内部存储为2009-11-01 01:30:00 -05:00
这很好,也很合理.但是如何保存到01:30:00 -04:00呢?该文件没有显示指定偏移,因此,当我试图指定偏移它已经正式忽略任何支持.
我想到的唯一解决方案是将服务器设置为不使用夏令时的时区,并在我的脚本中进行必要的转换(我正在使用PHP).但这似乎不应该是必要的.
非常感谢任何建议.
我使用了一个新的Date()对象来填充MySQL DB中的字段,但是该字段中存储的实际值是在我的本地时区.
如何配置MySQL以将其存储在UTC/GMT时区?
我认为,配置连接字符串会有所帮助,但我不知道如何.连接字符串中有许多属性,如useTimezone,serverTimzone,useGmtMillisForDatetimes,useLegacyDatetimeCode,...
我正在使用MySQL 5.0.我需要将日期时间信息存储在一列中.我的意思是使用DATETIME或TIMESTAMP列类型.但我有夏季 - 冬季时间变化的问题.
我的时区是CET.夏天我们使用夏令时(CEST,它是GMT + 2),冬天我们使用冬季时间(CET,它是GMT + 1).在夏季时间变为冬季的那一天(2012年是在10月28日)我们有时间凌晨2点两次.这一天的时间顺序是:
... -> 1:00 CEST -> 2:00 CEST -> 2:00 CET (= 3:00 CEST) -> 3:00 CET -> ...
Run Code Online (Sandbox Code Playgroud)
所以,如果我有时间戳/日期时间'2012-10-28 02:00:00'如果此时间代表夏令时或冬季时间凌晨2点,我无法正确说出.
我有两个不同的Java日期:
Date d1 = new Date(1351382400000); // 2:00 CEST (summer-time)
Date d2 = new Date(1351386000000); // 2:00 CET (winter-time)
Run Code Online (Sandbox Code Playgroud)
当我使用标准时间戳/日期时间格式(即.'yyyy-MM-dd HH:mm:ss')将它们存储在数据库中时,它们都存储相同的数据"2012-10-28 02:00:00".但是当我从数据库中将这些值返回到Date变量时,我得到两个相同的日期.因此输入日期不同,但输出日期相同.
如果我使用该FROM_UNIXTIME函数存储日期值,也会出现同样的情况:FROM_UNIXTIME(1351382400)和FROM_UNIXTIME(1351386000).值以相等的值存储在数据库列(DATETIME或TIMESTAMP类型)中.因此,当我将这些值输入Java的Date对象时,我再次获得两个相同的日期(在冬季).
有没有办法在MySQL中存储时区,或者如何处理DATETIME/TIMESTAMP列中的时区信息?
当然,我可以使用unix-timestamp将BIGINT值存储在数据库中.但我想知道如何用任何MySQL日期时间类型解决这个问题.
任何帮助或技巧是值得赞赏的... :)
非常感谢.
Honza(sporak)
编辑#1:
如果我试图存储时间戳值,然后将此时间戳值提取到java的日期,我再次得到错误的日期.假设我有一个带有TIMESTAMP列的简单表.我以这种方式将数据存储在此表中:
mysql> INSERT INTO `tab` (timestamp_column) VALUES
(FROM_UNIXTIME(1351382400)), // …Run Code Online (Sandbox Code Playgroud)