2012-08-28 35 views
6

Tôi đang thực hiện một thử nghiệm tạo dữ liệu được ghi tự động. Phần mềm tạo ra một dấu thời gian có định dạng 41149.014850. Tôi muốn chuyển đổi dấu thời gian thập phân này thành 28.08.2012 00:21:23. Làm thế nào tôi có thể làm điều này trong R thanh lịch nhất?Cách chuyển đổi ngày giờ thanh lịch từ thập phân sang "% d.% M.% Y% H:% M:% S"?

Tôi đã thử sử dụng chức năng strsplit và cũng có chức năng as.Date có nguồn gốc được chỉ định và cũng có chức năng times. Nhưng không có kết quả. Tôi gặp sự cố khi chia dấu thời gian thành hai số mà tôi có thể truy cập với các chức năng as.Datetimes.

Dưới đây là một số mã demo:

myDatetime <- c(41149.004641, # 28.08.2012 00:06:41 
41149.009745, # 28.08.2012 00:14:02 
41149.014850, # 28.08.2012 00:21:23 
41149.019954) # 28.08.2012 00:28:44 

## not working out for me 
Dat.char <- as.character(myDatetime) 
date.split <- strsplit(Dat.char, split = "\\.") 
## how to proceed from here, if it is a good way at all 

Xin vui lòng cho tôi biết nếu bạn cần thêm thông tin về các thách thức hoặc nếu tôi có thể đưa ra câu hỏi trong một cách tốt hơn. Mọi tìm kiếm đều không có kết quả.

Trợ giúp trực tiếp hoặc liên kết đến các trang web/bài đăng khác được đánh giá cao.

Trả lời

9

Bạn có định dạng ngày giống như Excel (ngày sau ngày 1 tháng 1 năm 1900), vì vậy bạn cần chuyển đổi chúng sang định dạng ngày R. Sau đó, bạn có thể chuyển đổi nó thành định dạng ngày giờ (POSIXct).

# first convert to R Date 
datetime <- as.Date(myDatetime-1, origin="1899-12-31") 
# now convert to POSIXct 
(posixct <- .POSIXct(unclass(datetime)*86400, tz="GMT")) 
# [1] "2012-08-28 00:06:40 GMT" "2012-08-28 00:14:01 GMT" 
# [3] "2012-08-28 00:21:23 GMT" "2012-08-28 00:28:44 GMT" 
# times are sometimes off by 1 second, add more digits to seconds to see why 
options(digits.secs=6) 
posixct 
# [1] "2012-08-28 00:06:40.9823 GMT" "2012-08-28 00:14:01.9680 GMT" 
# [3] "2012-08-28 00:21:23.0399 GMT" "2012-08-28 00:28:44.0256 GMT" 
# round to nearest second 
(posixct <- round(posixct, "sec")) 
# [1] "2012-08-28 00:06:41 GMT" "2012-08-28 00:14:02 GMT" 
# [3] "2012-08-28 00:21:23 GMT" "2012-08-28 00:28:44 GMT" 
# now you can convert to your desired format 
format(posixct, "%d.%m.%Y %H:%M:%S") 
# [1] "28.08.2012 00:06:41" "28.08.2012 00:14:02" 
# [3] "28.08.2012 00:21:23" "28.08.2012 00:28:44" 
2

này được gần: Những con số chỉ ra số giây kể từ khi một ngày gần 1900/01/01:

as.POSIXct(x*3600*24, origin=as.Date("1900-01-01")-2, tz="UTC") 
[1] "2012-08-28 01:06:40 BST" "2012-08-28 01:14:01 BST" "2012-08-28 01:21:23 BST" 
[4] "2012-08-28 01:28:44 BST" 

Vẫn là một múi giờ bù đắp trong đó.

Các vấn đề liên quan