Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用AWSAPI处理PHP中的日期和时区_Php_Amazon Web Services - Fatal编程技术网

如何用AWSAPI处理PHP中的日期和时区

如何用AWSAPI处理PHP中的日期和时区,php,amazon-web-services,Php,Amazon Web Services,我使用的是AWS PHP SDK,Amazon的API在下面返回这个时间戳 2013-04-23T13:18:00Z 他们给我的时间戳好像已经在我的时区了。因为它没有指定它是哪个时区,我猜它被假定为我的本地时间。ISO 8601的wiki站点还声明 如果未提供带有时间表示的UTC关系信息,则假定时间为本地时间 但当我尝试在PHP中使用它时,就像它将其转换为本地时区一样。PHP的strotime页面上说 此函数的每个参数都使用默认时区,除非该参数中指定了时区 我的问题是,如果strotime已经

我使用的是AWS PHP SDK,Amazon的API在下面返回这个时间戳

2013-04-23T13:18:00Z
他们给我的时间戳好像已经在我的时区了。因为它没有指定它是哪个时区,我猜它被假定为我的本地时间。ISO 8601的wiki站点还声明

如果未提供带有时间表示的UTC关系信息,则假定时间为本地时间

但当我尝试在PHP中使用它时,就像它将其转换为本地时区一样。PHP的strotime页面上说

此函数的每个参数都使用默认时区,除非该参数中指定了时区

我的问题是,如果strotime已经在我的时区中,为什么要将它转换为我的时区?

亚马逊返回的日期末尾的“Z”表示它是UTC。您需要将时区转换为本地化时区。您可以通过执行以下操作来完成此操作:

<?php

$date = new DateTime('2013-04-23T13:18:00Z'); // Z = UTC
echo $date->format('H') . PHP_EOL;
//> 13
$date->setTimezone(new DateTimeZone('America/Los_Angeles')); // -0700
echo $date->format('H') . PHP_EOL;
//> 06

根据ISO 8601的wiki,亚马逊提供的这个时间已经是我的本地时间。
ISO 8601中的时区表示为本地时间(未指定位置)、UTC或UTC的偏移量。
因此,当我尝试转换它时,它将它转换为错误的时间,因为它已经在正确的时间。亚马逊提供了错误的格式吗?或者PHP正在转换它,而实际上它不应该转换?在您的问题中包含的日期中正确地提供了时区。时区为UTC+0000。Z表示“零”或+0000。这在ISO 8601中有效。除非你的时区是UTC+0000,否则你需要转换它。杰里米……我想问题可能是亚马逊的日期。我正在从CloudWatch客户端调用getMetricStatistics,开始日期为
2013-04-24T09:31:00-06:00
,结束日期为
2013-04-24T10:31:00-06:00
(数据的最后一个小时)。这些是它给我的一些日期。。。2013-04-24T10:26:00Z,2013-04-24T10:01:00Z,2013-04-24T10:21:00Z,2013-04-24T10:06:00Z。这就好像API正在传回我的本地时间,但时区是Z或零或zulu或+00:00。你明白了吗?啊,我现在明白你的意思了。介意与SDK共享您正在使用的代码吗?我可以更容易地了解代码的外观。