簡體   English   中英

“2006-04-03 08:00:00+01:00”日期時間戳 object 中的“+01:00”是什么?

[英]What is the "+01:00" in "2006-04-03 08:00:00+01:00" datetime timestamp object?

我打印了一個<class 'pandas._libs.tslibs.timestamps.Timestamp'> time變量,它顯示為

2006-04-03 08:00:00+01:00

我想知道最后的+01:00是什么? 這似乎與夏令時有關?

當我做的時候

print(time.timestamp())

我看到

1144047600.0

這是關閉 3600(一小時)。

+01:00指定與 UTC 的偏移量 正數表示早於 UTC,因此 8 am +01:00 將是 7 am UTC。 負值表示落后於 UTC,因此 8 am -01:00 將是 9 am UTC。

在這種情況下,經常提到“時區”。 然而,重要的是要注意地理意義上的許多時區/您可以在IANA 數據庫中找到它們可以在給定時間點共享相同的 UTC 偏移量。

此外,單獨的 UTC 偏移量並不能告訴您有關 DST 的任何信息。 為此,您需要知道時區。 日期/時間、時區和與該時區關聯的規則的組合允許您確定 DST 是否處於活動狀態。

對於您的示例日期,請嘗試以下操作:

from datetime import datetime
import zoneinfo

dt = datetime.fromisoformat("2006-04-03")

# let's assume a time zone and see if DST is active:
dt = dt.replace(tzinfo=zoneinfo.ZoneInfo("Europe/London"))
print(dt, dt.dst())
# 2006-04-03 00:00:00+01:00 1:00:00
#--> so yes, DST is active, offset of one hour

# let's see which time zones share UTC+1 on that date:
for z in zoneinfo.available_timezones():
    if dt.replace(tzinfo=zoneinfo.ZoneInfo(z)).strftime("%z") == "+0100":
        print(z)
>>>      
Europe/Guernsey
Europe/Jersey
GB
Africa/Ndjamena
GB-Eire
Europe/London
Europe/Belfast
Eire
Europe/Dublin
Africa/Algiers
Atlantic/Canary
Atlantic/Faroe
Europe/Lisbon
Atlantic/Faeroe
Etc/GMT-1
Africa/Bangui
Africa/Porto-Novo
Africa/Libreville
Africa/Malabo
Africa/Kinshasa
Africa/Lagos
Africa/Luanda
Atlantic/Madeira
Africa/Windhoek
Europe/Isle_of_Man
Africa/Niamey
Portugal
WET
Africa/Douala
Africa/Brazzaville

“2006-04-03 08:00:00+01:00”中的“+01:00”是什么...?

這是ISO 8601標准指定格式的時區偏移量 在此示例中,它表明2006-04-03 08:00:00+01:00UTC偏移一小時,即 UTC 的等效日期時間將是2006-04-03T07:00Z ,其中Z是縮寫對於Zulu ,代表00:00的時區偏移量。

如您所見,計算很簡單:要從具有不同偏移量的日期時間獲取 UTC 日期時間,減去多余的偏移量或添加較少的偏移量(如適用)。

我的專業領域是 Java,因此,我將使用 Java 語言進行演示。

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String args[]) {
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ssXXX");

        OffsetDateTime odt = OffsetDateTime.parse("2006-04-03 08:00:00+01:00", parser);
        System.out.println(odt);
        System.out.println(odt.withOffsetSameInstant(ZoneOffset.UTC));

        odt = OffsetDateTime.parse("2006-04-03 08:00:00-01:00", parser);
        System.out.println(odt);
        System.out.println(odt.withOffsetSameInstant(ZoneOffset.UTC));
    }
}

Output :

2006-04-03T08:00+01:00
2006-04-03T07:00Z
2006-04-03T08:00-01:00
2006-04-03T09:00Z

在線演示

您可能有興趣了解時區和時區偏移之間的區別。 時區 ID 通常指定為地區/城市,例如America/New_YorkEurope/London等。您可以在此處查看 tz 數據庫。 一個時區可以有一個或多個時區偏移量,例如Asia/Kolkata有一個時區偏移量+05:30 相比之下, Europe/London有兩個時區偏移量:根據其DST時間表,夏季為+01:00 ,冬季為+00:00 由於這個原因,代表帶時區的日期時間的 object 旨在自動調整其時區偏移量。 另一方面,表示帶時區偏移的日期時間的 object 包含固定偏移值。 以下演示展示了ZonedDateTime中的 ZonedDateTime 如何自動調整其偏移量。

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String args[]) {
        ZoneId zoneId = ZoneId.of("Europe/London");

        ZonedDateTime zdtSummer = LocalDate.of(2022, 5, 20).atStartOfDay(zoneId);
        System.out.println(zdtSummer);

        ZonedDateTime zdtWinter = LocalDate.of(2022, 11, 20).atStartOfDay(zoneId);
        System.out.println(zdtWinter);
    }
}

Output :

2022-05-20T00:00+01:00[Europe/London]
2022-11-20T00:00Z[Europe/London]

Trail:Date Time中了解有關現代日期時間 API 的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM