转换为没有时区的日期和时间? [复制]

Posted

技术标签:

【中文标题】转换为没有时区的日期和时间? [复制]【英文标题】:Convert to a date and time without a time zone? [duplicate] 【发布时间】:2015-07-15 15:56:54 【问题描述】:

我有一个"1/1/2010 10:00" 格式的时间。我想将其转换为时间对象。这次是位于阿尔伯塔省卡尔加里的公司时间。请注意,公司时间不进行夏令时调整。如何将其转换为日期时间对象?

【问题讨论】:

“没有时区”是什么意思?根据定义,时间有一个时区.... 抱歉,我的意思是公司时间不会随着夏令时而改变,因此在一年中的大部分时间里,公司时间与当地时间不一致。 那么您的意思是 MT 时区而不是 MST。对吗? 我认为您的意思是“转换时间,根据日期对 (MT-MST) 差异进行 1 小时调整” 那么大概你有一列日期时间,而不仅仅是一个值。 【参考方案1】:

您可以使用as.POSIXct 创建日期/时间对象。就时区而言,阿尔伯塔省卡尔加里看起来是 UTC-07:00,所以你可以这样做

strptime("1/1/2010 10:00", format="%m/%d/%Y %H:%M", tz="Etc/GMT-7")

(假设月/日/年格式——其他格式选项见?strptime)。您可以始终使用“GMT”而不是指定真正的时区。

【讨论】:

Import date-time at a specified timezone, disregard Daylight Savings Time 的副本。请投票结束。【参考方案2】:

假设您不希望时区出现在最终对象中,您可以尝试以下操作。我将其发布为答案而不是对 MrFlick 答案的评论,因为如果我尝试仅使用一个日期的代码,它似乎不起作用。出于某种原因,我的代码似乎只有在有 data.frame 的日期/时间时才有效。

my.data <- read.csv(text='
id,date,time,latitude,longitud
AA,3/16/2017,1:30,19.735,-156.085
AA,3/16/2017,2:57,19.800,-156.065
AA,3/16/2017,3:42,19.830,-156.057
AA,3/16/2017,17:31,19.963,-155.952
BB,3/16/2017,17:44,19.964,-155.951
BB,3/17/2017,2:46,19.985,-155.998
', header = TRUE, stringsAsFactors = FALSE, sep = ',')

my.data$date.time <- do.call(paste0, list(my.data$date, ' ', my.data$time))

my.data$date.time <- strptime(my.data$date.time, "%m/%d/%Y %H:%M", tz = "")
my.data
#  id      date  time latitude longitud           date.time
#1 AA 3/16/2017  1:30   19.735 -156.085 2017-03-16 01:30:00
#2 AA 3/16/2017  2:57   19.800 -156.065 2017-03-16 02:57:00
#3 AA 3/16/2017  3:42   19.830 -156.057 2017-03-16 03:42:00
#4 AA 3/16/2017 17:31   19.963 -155.952 2017-03-16 17:31:00
#5 BB 3/16/2017 17:44   19.964 -155.951 2017-03-16 17:44:00
#6 BB 3/17/2017  2:46   19.985 -155.998 2017-03-17 02:46:00

str(my.data)
#'data.frame':   6 obs. of  6 variables:
# $ id       : chr  "AA" "AA" "AA" "AA" ...
# $ date     : chr  "3/16/2017" "3/16/2017" "3/16/2017" "3/16/2017" ...
# $ time     : chr  "1:30" "2:57" "3:42" "17:31" ...
# $ latitude : num  19.7 19.8 19.8 20 20 ...
# $ longitud : num  -156 -156 -156 -156 -156 ...
# $ date.time: POSIXlt, format: "2017-03-16 01:30:00" "2017-03-16 02:57:00" "2017-03-16 03:42:00" "2017-03-16 17:31:00" ...

【讨论】:

以上是关于转换为没有时区的日期和时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期字符串转换为没有时区的日期对象

C# Epoch 时间到日期和时区转换

使用 pytz 将日期时间从一个时区转换为另一个时区

将 UTC 日期和时间转换为 UNIX 时间会给出错误的(时区不同)值。为啥?

解析没有时区转换的日期

Redshift:将时间戳转换为特定时区的日期