尝试将 UTC 时间转换为特定时区

Trying to convert UTC time with specific time zones

我目前正在通过连接到 OpenWeatherAPI 的 React 创建一个应用程序。该应用程序是当有人在该位置输入时它会拉出他们特定位置的天气。我遇到的问题是将特定位置的时间戳转换为当地时间。我用过MomentJs,但是时间老是出错。这个问题例如,如果有人选择日本东京,我希望它表明日出将是他们当地时间 6:50。现在,我将在 2020 年 12 月 28 日星期一 16:50:24 GMT-0500(东部标准时间)回来。

这是 API 片段:

{
  "dt": 1609176171,
    "sys": {
        "type": 1,
        "id": 8074,
        "country": "JP",
        "sunrise": 1609192224,
        "sunset": 1609227369
    },
    "timezone": 32400,
    "id": 1862143,
    "name": "Horinouchi",
    "cod": 200
}

您可以通过添加 timezone 值来创建日出日期。

下面的示例将在天气记录(Horinouchi)的时区中生成日期和时间,而不是用户的时区。

const data = {
  "dt": 1609176171,
  "sys": {
    "type": 1,
    "id": 8074,
    "country": "JP",
    "sunrise": 1609192224,
    "sunset": 1609227369
  },
  "timezone": 32400,
  "id": 1862143,
  "name": "Horinouchi",
  "cod": 200
};

// extract sunrise and timezone offset in UNIX epoch seconds
const {
  sys: {sunrise},
  timezone
} = data;

// create Date object for sunrise with timezone offset
const srTime = new Date((sunrise+timezone)*1000);

// convert number to a 2-digit string
const twoDigits = (val) => {
  return ('0' + val).slice(-2);
};

const year = srTime.getUTCFullYear();
const month = twoDigits(srTime.getUTCMonth()+1);
const dayOfMonth = twoDigits(srTime.getUTCDate());
const hours = twoDigits(srTime.getUTCHours());
const minutes = twoDigits(srTime.getUTCMinutes());
const seconds = twoDigits(srTime.getUTCSeconds());

console.log(`${year}-${month}-${dayOfMonth} ${hours}:${minutes}:${seconds}`);

请注意,日期将采用 UTC 时间,因此请务必以这种方式向用户显示它(即不要使用本地偏移量显示它)。

要显示 UTC 日期,请使用 Date.prototype: