Как извлечь правильные часовые пояса из объектов POSIXct и POSIXlt?

time1 = as.POSIXlt("2010-07-01 16:00:00", tz="Europe/London")
time1
# [1] "2010-07-01 16:00:00 Europe/London"

но

time2 = as.POSIXct("2010-07-01 16:00:00", tz="Europe/London")
time2
# [1] "2010-07-01 16:00:00 BST"

Почему часовой пояс отображается по-другому? Это важно для меня, потому что мне нужно извлечь часовые пояса из моей даты.

base::format(time1, format="%Z")
# [1] "BST"
base::format(time2, format="%Z")
# [1] "BST"

оба дают одно и то же «BST» для экономии времени в Великобритании!

Проблема в том, что «BST» не распознается форматом POSIXct / POSIXlt:

as.POSIXlt("2010-07-01 16:00:00", tz="BST")
# [1] "2010-07-01 16:00:00 BST"
# Warning messages:
# 1: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :
#   unknown timezone 'BST'
# 2: In structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz) :
#   unknown timezone 'BST'
# 3: In strptime(x, f, tz = tz) : unknown timezone 'BST'
as.POSIXct("2010-07-01 16:00:00", tz="BST")
# [1] "2010-07-01 16:00:00 GMT"
# Warning messages:
# 1: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :
#   unknown timezone 'BST'
# 2: In structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz) :
#   unknown timezone 'BST'
# 3: In strptime(x, f, tz = tz) : unknown timezone 'BST'
# 4: In structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz) :
#   unknown timezone 'BST'
# 5: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'BST'

Я действительно запутался. У меня 2 вопроса:

1 / В чем разница между форматами POSIXct и POSIXlt

2 / Кто-нибудь знает, какой часовой пояс я могу использовать?

«Европа / Лондон» работает с POSIXlt, но не POSIXct. Кроме того, его нельзя извлечь из времени с помощью base :: format
"BST" не распознается как действительный часовой пояс в как .POSIXct или как.POSIXlt функции .

18
задан MichaelChirico 9 November 2017 в 08:14
поделиться