我使用以下代码将12小时UTC转换为新的时区
MySourceCodes: (我的udp套接字服务器代码的一部分)
// $gps_time = "9:43:52";
$gps_time = $time_hour.":".$time_min.":".$time_sec;
// $time_received = "01:45:04 2012-07-28";
$time_received = date('H:i:s Y-m-d');
$utc = new DateTimeZone("UTC");
$moscow = new DateTimeZone("Europe/Moscow");
//Instantiate both AM and PM versions of your time
$gps_time_am = new DateTime("$gps_time AM", $utc);
$gps_time_pm = new DateTime("$gps_time PM", $utc);
//Received time
$time_received = new DateTime($time_received, $moscow);
//Change timezone to Moscow
$gps_time_am->setTimezone($moscow); /* ### ### Line 105 Error ### ### */
$gps_time_pm->setTimezone($moscow);
//Check the difference in hours. If it's less than 1 hour difference, it's the correct one.
if ($time_received->diff($gps_time_pm)->h < 1) {
$correct_time = $gps_time_pm->format("H:i:s Y-m-d");
}
else {
$correct_time = $gps_time_am->format("H:i:s Y-m-d");
}
echo $correct_time;
PHP错误:
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (0:11:38 AM) at position 8 (A): The timezone could not be found in the database' in C:\xampp\php\udp.php:105
Stack trace:
#0 C:\xampp\php\udp.php(105): DateTime->__construct('0:11:38 AM', Object(DateTimeZone))
#1 {main} thrown in C:\xampp\php\udp.php on line 105
输入时间为0:11:38 AM
时出错
的 问题:
我该如何解决这个问题?
修改: 我的输入时间来自GPS追踪器的来源(将秒数更改为12小时格式化时间)
$time_hour = floor($get_time / 3600);
$time_min = floor(($get_time - ($time_hour*3600)) / 60);
$time_sec = dotwodigits(($get_time - (($time_hour*3600) + ($time_min * 60))));
GPS Time = $time_hour.":".$time_min.":".$time_sec
答案 0 :(得分:0)
正如我在评论中指出的那样,12小时的时间没有0:xx:yy
时间。那么,你可以做的是事先检查$time_hour
的值:
//assigning values to $time_hour, $time_min, and $time_sec
if ($time_hour == 0) $time_hour = 12;
//rest of code
这样可以防止将无效时间传递给DateTime
构造函数。
编辑:此检查实际上可以在分配$time_hour
:
$time_hour = floor($get_time / 3600) ?: 12;