将当地时间转换为GMT


Convert local time to GMT

我有以下数据可供使用:

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)转换为格林尼治标准时间一(2)(反之亦然),同时考虑到所有可能的例外情况,如夏季、1970-2038年的时间限制等。?不管怎样,它们重要吗?

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

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

我输入的时间是2012年9月3日星期一15:30:10,美国东部时区,目前为夏令时("夏令时间")。在UTC时区,对应于19:30:10。无论哪种方式,它都是UNIX时间戳(time_t值)1346700610。根据您在地球表面的位置,您当时的当地时间可能在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来说,时间仍然是1346700610。

看起来您试图根据时区计算不同的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。

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

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

你在找这个吗?

date_default_timezone_set('America/Denver');

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