2016-10-24 7 views
5

मैं nanosecond का पठन स्तर में हेक्स समय (कर्नेल मॉड्यूल से पहले उत्पादन हो रही है) कन्वर्ट करने के लिए कोशिश कर रहा हूँ,हेक्स समय से नैनो दूसरी ग्रैन्युलरिटी कैसे प्राप्त करें?

580a9272.0a9ce167 

और मैं मानव पठनीय प्रारूप में पर्ल का उपयोग कर इसे परिवर्तित करने के लिए कोशिश कर रहा हूँ:

while (<>) { 
s/^([a-fA-F0-9]+)(\.)([a-fA-F0-9]+)(\s+.*)/sprintf("%s%s%s%s",&$converter(hex($1)), $2, hex($3), $4)/oe; 
} continue { 
print; 
} 

उत्पादन : शुक्र अक्टूबर 21 18:10:58 2016.178053479

कनवर्टर लोकलटाइम() और जीएमटाइम() सीधे का उपयोग करता है, मुझे नैनो ग्रैन्युलरिटी और फिर साल के साथ समय चाहिए। किसी भी मदद की अत्यधिक सराहना की जाती है।

+1

क्या इससे मदद मिलेगी? [http://stackoverflow.com/questions/36731370/convert-64-bit-hex-to-nanoseconds-timestamps](http://stackoverflow.com/questions/36731370/convert-64-bit-hex-to- नैनोसेकंड-टाइमस्टैम्प) –

+0

लिंक सी ++ में ऐसा करने के बारे में बताता है, मैं कनवर्ट करने के लिए perl का उपयोग कर रहा हूं, मैं बहुत करीब हूं लेकिन आखिरी बिट पर लापता हूं। – MikasaAckerman

उत्तर

3

POSIX::strftime अंशकालिक सेकंड का समर्थन नहीं करता है, इसलिए आपको भागों में आउटपुट बनाने की आवश्यकता है। ताकि एक विकल्प प्रस्तुत करता है

use POSIX qw(strftime); 

my $opt_gmt = 1; 
my $hex = '580a9272.0a9ce167'; 

my ($s, $ns) = map hex($_), split /\./, $hex; 
my $formatted_ns = sprintf("%09d", $ns); 
my $formatted = strftime("%a %b %d %H:%M:%S.$formatted_ns %Y", 
    defined($opt_gmt) ? gmtime($s) : localtime($s)); 

say $formatted; # Fri Oct 21 22:10:58.178053479 2016 

दिनांक समय, नैनोसेकंड के लिए देशी समर्थन है।

use DateTime qw(); 

my $opt_gmt = 1; 
my $hex = '580a9272.0a9ce167'; 

my ($s, $ns) = map hex($_), split /\./, $hex; 
my $dt = DateTime->from_epoch(epoch => $s); 
$dt->set_nanosecond($ns); 
$dt->set_time_zone(defined($opt_gmt) ? 'UTC' : 'local'); 

say $dt->strftime("%a %b %d %H:%M:%S.%N %Y"); # Fri Oct 21 22:10:58.178053479 2016 
+0

मैं उपयोग कर रहा हूं: यदि (परिभाषित ($ opt_gmt)) { # जीएमटी हमेशा जीतता है। $ कनवर्टर = \ & my_gmtime; } एल्सिफ़ (परिभाषित ($ opt_local)) { # लोकलटाइम अनुरोध किया गया। $ कनवर्टर = \ & my_localtime; } अन्य { # डिफ़ॉल्ट लोकलटाइम है। $ कनवर्टर = \ & my_localtime; } – MikasaAckerman

+0

तदनुसार समायोजित। यह वास्तव में अजीब है कि 'opt_gmt = 0; 'यूटीसी का उपयोग करने का कारण बनता है, हालांकि। – ikegami

+0

बस एक फॉलो अप, यह किसी भी अन्य मॉड्यूल का उपयोग किए बिना किया जा सकता है? लेकिन कोर ?? – MikasaAckerman

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