【问题标题】:UTC Time to GMT+2 in AS3UTC 时间到 AS3 中的 GMT+2
【发布时间】:2011-12-14 22:10:59
【问题描述】:

我遇到了问题。使用 AS3 原生提供的 Date() 函数,我将 UTC 时间转换为本地机器时间。

我的问题是这个,看monthhour

2011-10-07 18:45:00 -> 2011-10-07 21:45:00
2011-11-07 18:45:00 -> 2011-11-07 20:45:00

这可能是因为夏令时,但我认为用于日期操作的本机函数考虑到了这一点。

我是对的,这就是问题所在?我应该自己考虑夏令时吗?还是有什么不同?

【问题讨论】:

  • UTC 和 GMT 是一样的...不确定你的意思?
  • 我的意思是 GMT+2。当地时间为 GMT+2,但在一年中的第 10 个月之后,所有时间显示为提前 1 小时。我查了冬天的时间,它发生在 10 月 31 日。大概就是这样。但不知道如何处理这个问题,因为我在想 AS3 的日期是所有的日期都非常大。
  • 您是否将时区信息保存在某处? AS3 代码在哪里运行?它是否在具有正确 TimeZone 设置的机器上运行?
  • 嘿。时区信息取自设备。它作为 AIR 应用程序在移动设备上运行。

标签: actionscript-3 datetime date utc localtime


【解决方案1】:

来自Date 文档:

Date 类处理夏令时的方式不同,具体取决于操作系统和运行时版本... Date 对象检测当前语言环境中是否采用夏令时,如果是,则检测标准到夏令时节省时间转换日期和时间。

据此,我相信这意味着 Date 对象将检测当前时间的 DST。如果您正在寻找未来的日期,我认为您需要自己处理偏移量。

我过去曾使用此代码来解释在 computus.org 上发现的 DST:

public static function getTimezone():Number
{
  // Create two dates: one summer and one winter
  var d1:Date = new Date( 0, 0, 1 )
  var d2:Date = new Date( 0, 6, 1 )
 
  // largest value has no DST modifier
  var tzd:Number = Math.max( d1.timezoneOffset, d2.timezoneOffset )
 
  // convert to milliseconds
  return tzd * 60000
}
 
public static function getDST( d:Date ):Number
{
  var tzd:Number = getTimezone()
  var dst:Number = (d.timezoneOffset * 60000) - tzd
  return dst
}

【讨论】:

  • 嗯,这很有趣。明天我会做一个测试然后复出。谢谢。
  • 成功了,谢谢。我不确定这是否适用于我自己以外的其他时区,但我所做的是:myDate.hours+=1+getDST(converted)/MILLISECONDS_IN_A_DAY;
【解决方案2】:

如果您只想使用 select 语句从 UTC 0 返回 +2 日期值,并且您不必满足 DLST,例如南非 然后以下对我有用:

SELECT [FieldA]
       ,DATEADD(hour,2([DateField])) AS [NewDate]
FROM [Table]

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 2012-10-07
    • 2011-10-27
    • 2010-09-15
    • 2011-01-18
    • 2015-04-26
    相关资源
    最近更新 更多