[英]How to convert "2006-04-01 00:00:00.000 +0200" to "2006-04-01"?
[英]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:00
從UTC偏移一小時,即 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_York
、 Europe/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.