You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符格式日期时间转换为正确识别夏令时的CET时区?

问题原因

欧洲夏令时(CEST)转标准时间(CET)的切换发生在2023年10月29日周日凌晨2点(CEST),时钟回拨1小时到凌晨1点(CET),导致02:00:00到02:59:59这个时间段重复出现两次:一次属于CEST,一次属于CET。R默认会将这类模糊时间解析为切换后的CET时区,这和你期望的「CEST持续到03:00:00」不符。

解决方案

使用as.POSIXct的ambiguous参数,明确指定模糊时间解析为夏令时(CEST):

timestamps <- c("2023-10-29 00:00:00", "2023-10-29 00:15:00", "2023-10-29 00:30:00", "2023-10-29 00:45:00", "2023-10-29 01:00:00", "2023-10-29 01:15:00", "2023-10-29 01:30:00", "2023-10-29 01:45:00", "2023-10-29 02:00:00", "2023-10-29 02:15:00", "2023-10-29 02:30:00", "2023-10-29 02:45:00", "2023-10-29 03:00:00", "2023-10-29 02:15:00", "2023-10-29 02:30:00", "2023-10-29 02:45:00", "2023-10-29 03:00:00", "2023-10-29 03:15:00", "2023-10-29 03:30:00", "2023-10-29 03:45:00", "2023-10-29 04:00:00", "2023-10-29 04:15:00")

# 解析时指定ambiguous=TRUE,将模糊时间解析为夏令时(CEST)
corrected_dates <- as.POSIXct(timestamps, tz = "CET", ambiguous = TRUE)
print(corrected_dates)

输出验证

执行后,2023-10-29 02:00:00到2023-10-29 02:59:59的时间会被解析为CEST,03:00:00及以后则自动切换为CET,符合你的需求:

[1] "2023-10-29 00:00:00 CEST" "2023-10-29 00:15:00 CEST" "2023-10-29 00:30:00 CEST" "2023-10-29 00:45:00 CEST" "2023-10-29 01:00:00 CEST"
 [6] "2023-10-29 01:15:00 CEST" "2023-10-29 01:30:00 CEST" "2023-10-29 01:45:00 CEST" "2023-10-29 02:00:00 CEST" "2023-10-29 02:15:00 CEST"
[11] "2023-10-29 02:30:00 CEST" "2023-10-29 02:45:00 CEST" "2023-10-29 03:00:00 CET"  "2023-10-29 02:15:00 CEST" "2023-10-29 02:30:00 CEST"
[16] "2023-10-29 02:45:00 CEST" "2023-10-29 03:00:00 CET"  "2023-10-29 03:15:00 CET"  "2023-10-29 03:30:00 CET"  "2023-10-29 03:45:00 CET"
[21] "2023-10-29 04:00:00 CET"  "2023-10-29 04:15:00 CET"

补充说明

如果使用lubridate包,同样可以通过parse_date_time函数的ambiguous参数实现:

library(lubridate)
corrected_dates <- parse_date_time(timestamps, orders = "ymd HMS", tz = "CET", ambiguous = TRUE)

内容的提问来源于stack exchange,提问作者svend Lars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:00:55