0

要么我疯了,要么我根本不知道我在做什么。我倾向于后者。

我正在尝试转换:1316826000,我非常有信心应该是 Sat, 24 Sep 2011 01:00:00 GMT

http://www.onlineconversion.com/unix_time.htm证实了这一点。

http://www.unixtimestamp.com/index.php告诉我 09 / 23 / 11 @ 8:00:00pm EST,到目前为止一切顺利。我碰巧在 EST,这是我想从 PHP 中得到的结果。

当我执行 date('l, M d, Y, h:ia', $iTime) 时,我得到:2011 年 9 月 23 日,星期五,上午 12:00,整整 20 个小时。

我已经使用 date('c') 确认了服务器的时间是正确的。日期('c')输出为:2012-05-19T03:19:20+00:00。服务器位于中央时区,目前是晚上 10:20。5月18日。

echo date_default_timezone_get() 输出“GMT”(使用 date_default_timezone_set('GMT') 在脚本中的其他位置设置)

我错过了什么?到目前为止,我所读到的任何内容都无法解释我如何得到比应有的结果晚 20 小时的结果。它是快一个小时还是慢一个小时,我至少可以把它当作某种 DST 白痴,但是 20?疯狂!谢谢阅读!

4

2 回答 2

1

检查您的 php.ini 对 date.timezone 的说明。在 unix 中,它通常在这里:/etc/php.ini 然后使用 PHP 识别的适当时区: http ://www.php.net/manual/en/timezones.php

date.timezone = 'America/New_York'

然后重新加载您的网络服务器。

Unix 时间仅表示自纪元以来的秒数。与时区无关。对于您从 GMT 移开的每个区域,时区只需从 unix 时间添加或减去 1 小时(3600 秒)。一个例子:

$userTimezone = new DateTimeZone('America/New_York');
$gmtTimezone = new DateTimeZone('GMT');
$myDateTime = new DateTime('2014-01-22 11:44', $gmtTimezone);
$offset = $userTimezone->getOffset($myDateTime);
echo $offset;

这将输出:-14400 或 4 小时。纽约和格林威治标准时间有什么区别

于 2014-01-22T02:46:39.750 回答
0

在Joda-Time 2.3 库中使用一些 Java 代码,因为我不懂 PHP……</p>

long m = 1316826000L;

DateTime dateTimeUtc = new DateTime( m * 1000L, DateTimeZone.UTC );
DateTime dateTimeNewYork = dateTimeUtc.toDateTime( DateTimeZone.forID( "America/New_York" ) );

System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeNewYork: " + dateTimeNewYork );

我可以告诉你,从 1970 UTC/GMT(Unix 纪元)开始的 1316826000 秒是……</p>

dateTimeUtc: 2011-09-24T01:00:00.000Z
dateTimeNewYork: 2011-09-23T21:00:00.000-04:00

因此,正如评论者所说,这将是美国东部标准时间晚上 8 点,但美国东部标准时间当天没有生效。DST(夏令时)(愚蠢,正如您正确指出的那样)一直有效到当年的11 月 9日(2011 年)。因此,一天中的时间提前一小时,到晚上 9 点。

在 GMT/UTC 中,这意味着第二天早上 1 点。

美国东海岸的标准时间比 UTC/GMT 晚 5 小时。使用 DST,它比 UTC/GMT 晚 4 小时(更近一小时)。

你感到困惑的地方:

  • 您的时间格式/转换不正确
    我无法帮助,因为我不知道 PHP。
  • 您应该为此类工作使用合格的日期时间库。
    日期时间工作是复杂、棘手、令人困惑且容易出错的。
    这个问题讨论了用于 PHP 的 Joda-Time (for Java) 类库的可能性。
  • 您使用了三个字母的时区代码。避免这些
    这些代码既不是标准化的也不是唯一的——有常见的重复。相反,请使用正确的时区名称。在美国东海岸的情况下,“America/New_York”。此外,在这种情况下,您将时区区域和规则(美国东海岸)与这些规则的特定应用(EST)混淆了。说“America/New_York”意味着“在该日期生效的任何时区规则,而说“EST”(如果解释为美国东部标准时间)意味着“UTC-05:00”。所以要么(a)使用时区名称,例如“America/New_York”,或 (b) 使用特定的偏移量,例如“-05:00”。
于 2014-01-22T02:12:30.080 回答