2

我有这些数据可供使用:

Timezone of local time as integer: 8.75 (which is UTC+8.75)
1) 2012-09-04 03:15:03
2) 2012-09-03 18:30:03 (GMT)
3) 1346728503
4) 1346697003 (GMT)

现在,我想知道如何将本地时间 (1) 转换为 GMT 一 (2)(反之亦然),同时考虑到夏季时间、1970-2038 时间限制等所有可能的例外情况?无论如何,它们重要吗?

PHP 函数主要不允许指定本地时间的时区来转换时间 - 它们采用服务器的本地时间,这不是我想要的(我也不想改变它)。我显然可以8.75*60*60从 1346728503 (3) 中减去,但这无论如何都会产生准确的值吗?

4

3 回答 3

3

好的,首先:接受时间戳的 PHP 函数不接受时区,因为UNIX 时间戳不知道也不关心时区

当我输入时,时间是 2012 年 9 月 3 日星期一 15:30:10,在美国东部时区,目前正在遵守夏令时(“夏令时”)。在 UTC 时区中,这对应于 19:30:10。无论哪种方式,它都是 UNIX 时间戳(time_t值)1,346,700,610。根据您在地球表面的位置,您当时的当地时间可能落在 26 小时范围内的任何时间,从 9 月 3 日上午 7:30:10 到 9 月 4 日上午 9:30:10 (2012-09- 03T07:30:10-12:00 至 2012-09-04T09:30:10+14:00)。但是无论您的本地标签是什么,对于 UNIX 和 PHP,时间问题仍然是 1,346,700,610。

看起来您试图time_t根据时区计算不同的值,但这并不计算。时区偏移量永远不会应用于time_t不会改变的值;它们仅适用于人类可读的表示。

如果可能,请不要尝试进行自己的时区转换。规则往往会改变。现在,对我来说,当地时间比 UTC 早四个小时;再过几个月,就会提前5个小时。此外,今年发生这种变化的规则与五年前不同。因此,根据我尝试转换的特定时间戳值,我必须应用不同的规则。

使用库函数。

要将时间的字符串表示形式转换为time_t值,请使用strtotime. 如果字符串包含时区引用,strtotime将为您进行转换。如果没有,您可以date_default_timezone_set按照 Connie 的建议使用 来告诉 PHP 在解释字符串时使用哪个时区。

要将time_t值转换回字符串,请使用date获取“本地”时间(即,根据使用 设置的时区的时间date_default_timezone_set;您可以使用 询问 PHP 该时区是什么date_default_timezone_get),或gmdate获取 UTC。

于 2012-09-03T19:40:06.820 回答
1

您已经内置了它gmdate()以获取 GMT 的日期/时间并gmstrftime()从给定的日期/时间字符串转换。

或者您可以使用 timezone_offset_get() 并手动执行。

于 2012-09-03T19:54:19.307 回答
0

你在找这个吗?

date_default_timezone_set('America/Denver');

如需使用此功能的完整时区列表,请单击此处

于 2012-09-03T19:23:36.610 回答