【问题标题】:TimeZone for unix, UTC time to Human readable time conversion [duplicate]Unix的时区,UTC时间到人类可读时间的转换[重复]
【发布时间】:2022-01-10 11:29:17
【问题描述】:

我正在使用 PHP 从this API 获取天气信息。我的输出如下所示

我需要使用 PHP 将 sunrisesunset 值转换为人类可读的格式。在这方面我需要使用像Asia/Kolkata 这样的TimeZone。

如何让 TimeZone 将 sunrisesunset 值转换为人类可读格式?

【问题讨论】:

  • 不要发布文字图片
  • 谢谢@MarcinOrlowski。实际上我展示了输出样本。
  • 我不愿意为了运行测试而重新输入数字,但这很可能是 Unix 时间。一半的 PHP 原生日期函数接受它作为参数。

标签: php unix time utc timezone-offset


【解决方案1】:
<?php
   //1638318242
   echo(gmstrftime("%B %d %Y, %X %Z",mktime(16,3,8,31,82,42))."<br>");
   setlocale(LC_ALL,"hu_HU.UTF8");
   echo(gmstrftime("%Y. %B %d. %A. %X %Z"));
?>
 // Output
 September 20 2044, 16:03:08 GMT
 2021. December 04. Saturday. 14:40:27 GMT

【讨论】:

    【解决方案2】:

    DateTime 类用于从时间戳 1638318242 创建对象。如果从时间戳创建 DateTime 对象,则时区始终为 UTC。 使用方法 setTimeZone() 将对象转换为所需的时区(此处为亚洲/加尔各答)。然后可以使用 format 方法将输出转换为所需的形式。

    <?php
    $sunrise = 1638318242;
    
    $dateTime = date_create('@'.$sunrise)->setTimeZone(new DateTimeZone("Asia/Kolkata"));
    
    echo "Sunrise in Calcutta on ". $dateTime->format('F j, Y \a\t H:i');
    //Sunrise in Calcutta on December 1, 2021 at 05:54
    

    【讨论】:

    • 谢谢@jspit。但是我怎样才能从这个 API 响应中获得 Asia/Kolkata 值以便像这样使用 new DateTimeZone("Asia/Kolkata") ?你能在这方面帮助我吗?
    • 如果只知道时区的秒偏移量 (timezone=21600) 并且不知道诸如“Asia/Dhaka”之类的名称,则可以使用偏移量来计算时区标识符,例如“+0600”。
    • 如果只需要日期和时间而不是 DateTime 对象,您可以这样做:gmdate('F j, Y \a\t H:i', 1638318242+21600);
    • 谢谢@jspit。在过去的 5 天里,我一直在与这个问题作斗争。最后你的gmdate('F j, Y \a\t H:i', 1638318242+21600); 解决方案对我有用。非常感谢。谢谢。
    猜你喜欢
    • 2018-11-02
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2011-05-26
    • 2010-12-11
    • 2011-05-29
    相关资源
    最近更新 更多