2012-08-28 5 views
6

मैं एक प्रयोग कर रहा हूं जो स्वचालित रूप से लॉग इन डेटा उत्पन्न करता है। सॉफ्टवेयर 41149.014850 प्रारूप का एक टाइमस्टैम्प उत्पन्न करता है। मैं इस दशमलव टाइमस्टैम्प को 28.08.2012 00:21:23 में परिवर्तित करना चाहता हूं। मैं आर में सबसे सुंदर तरीके से यह कैसे कर सकता हूं?डेटटाइम को दशमलव से "% d।% M।% Y% एच:% एम:% एस" में स्पष्ट रूप से कैसे परिवर्तित करें?

मैंने फ़ंक्शन strsplit और एक निर्दिष्ट उत्पत्ति के साथ as.Date फ़ंक्शन का उपयोग करने की कोशिश की, और times फ़ंक्शन भी। लेकिन कोई फायदा नहीं हुआ। मुझे टाइमस्टैम्प को दो संख्याओं में विभाजित करने में समस्याएं हैं जिन्हें मैं as.Date और times कार्यों के साथ एक्सेस कर सकता हूं।

यहाँ कुछ डेमो कोड है:

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 

कृपया आप चुनौती के बारे में अधिक जानकारी की जरूरत है, तो मुझे पता है या अगर मैं एक बेहतर तरीके से सवाल पैदा कर सकते हैं करते हैं। किसी भी खोज का कोई फायदा नहीं हुआ था।

अन्य वेबसाइटों/पदों के लिए प्रत्यक्ष सहायता या लिंक की सराहना की जाती है।

उत्तर

9

आपकी तिथियां एक्सेल-जैसी तिथि प्रारूप (1 जनवरी, 1 9 00 के बाद के दिनों) में हैं, इसलिए आपको उन्हें आर दिनांक प्रारूप में रूपांतरित करने की आवश्यकता है। फिर आप इसे डेटाटाइम प्रारूप में बदल सकते हैं (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

यह करीब हो जाता है: संख्या 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" 

वहाँ अभी भी एक समय क्षेत्र वहाँ में ऑफसेट है।

संबंधित मुद्दे