2013-03-02 8 views
13

UUID तिथि प्रारूप 2011-04-22 में कनवर्ट कैसे करें?जावा का उपयोग करके यूयूआईडी से एक तारीख कैसे निकालें?

उदाहरण के लिए, मैं तिथि प्रारूप में बदलने के लिए इस

118ffe80-466b-11e1-b5a5-5732cf729524. 

तरह UUID है?

मैंने कोशिश की

String uuid="118ffe80-466b-11e1-b5a5-5732cf729524"; 
    UUID uid = UUID.fromString(uuid); 
    long ls=convertTime(uid.timeStamp()); // it returns long value 

    public String convertTime(long time){ 
      System.out.println("====="+time); 
      Date date = new Date(time); 
      Format format = new SimpleDateFormat("yyyy/MM/dd"); 
      return format.format(date).toString(); 
     } 

उत्पादन मुझे मिल गया: 4294744/11/02

एक ही मामले पर्ल

$uuid='ef802820-46b3-11e2-bf3a-47ef6b3e28e2'; 
$uuid =~ s/-//g; 

my $timelow = hex substr($uuid, 2 * 0,  2 * 4); 
my $timemid = hex substr($uuid, 2 * 4,  2 * 2); 
my $version = hex substr($uuid, 2 * 6,  1); 
my $timehi = hex substr($uuid, 2 * 6 + 1, 2 * 2 - 1); 

my $time = ($timehi * (2**16) + $timemid) * (2**32) + $timelow; 
my $epoc = int($time/10000000) - 12219292800; 
my $nano = $time - int($time/10000000) * 10000000; 

#$time_date = scalar localtime $epoc; 
#print strftime('%d-%m-%Y %H:%M:%S', localtime($epoc)); 
#print "\n Time: ", scalar localtime $epoc, " +", $nano/10000, "ms\n"; 
+0

कृपया इस यूआरएल के साथ कृपया जांचें http://stackoverflow.com/questions/15127648/how-do-we-convert-uuid-to-date-in-perl – BALASCJP

+0

क्या आप जानते हैं कि वह स्रोत यूयूआईडी एक v1 UUID है? – Joe

+0

'टाइमस्टैम्प()' मध्यरात्रि, 15 अक्टूबर, 1582 यूटीसी के बाद से 100-नैनोसेकंद इकाइयों में मापा गया टाइमस्टैम्प देता है; दिनांक (लंबी तारीख) '1 जनवरी, 1 9 70, 00:00:00 GMT से मिलीसेकंड की अपेक्षा करता है। तो आपको यूयूआईडी एल्गोरिदम के संस्करण के आधार पर एक प्रारूप से दूसरे – tmuguet

उत्तर

13

के लिए ठीक काम कर रहा UUID के लिए जावाडोक निम्नलिखित कहते हैं टाइमस्टैम्प फ़ील्ड के बारे में:

60 बिट टाइमस्टैम्प मान इस यूयूआईडी के time_low, time_mid, और time_hi फ़ील्ड से बनाया गया है। परिणामी टाइमस्टैम्प को मध्यरात्रि, 15 अक्टूबर, 1582 यूटीसी के बाद से 100-नैनोसेकंद इकाइयों में मापा जाता है।

(जोर मेरा)

जावा टाइमस्टैम्प 1970-01-01 के बाद से मिलीसेकेंड में है। यूयूआईडी से सार्थक तारीख प्राप्त करने के लिए, आपको दो चीजें करने की आवश्यकता होगी: 100ns से 1ms सटीक (10000 तक विभाजित) में परिवर्तित करें और 1582-10-15 से 1 9 70-01-01 तक पुन: बदलें, जो आप कर सकते हैं निरंतर मूल्य जोड़कर।

WolframAlpha tells us कि 1582/10/15 -12219292800 की एक यूनिक्स टाइमस्टैम्प से मेल खाती है, तो सही दिनांक प्राप्त करने के लिए, आप मिलीसेकेंड की संख्या को 12219292800 जोड़ना होगा आप द्वारा 10000

भाग देने पर कोई साइड नोट के रूप में के बाद मिला : इस UUID समय-आधारित UUID तो इस विधि फेंकता UnsupportedOperationException नहीं है, तो

टाइमस्टैम्प मूल्य समय-आधारित UUID है, जो संस्करण प्रकार 1. है में केवल सार्थक है।

... तो सुनिश्चित करें कि आपका कोड या तो कभी भी मुठभेड़ टाइप 1 यूयूआईडी है, या यह संभाल सकता है कि उनके पास टाइमस्टैम्प नहीं है।

+0

धन्यवाद बेरेन्ड कुछ सरल उदाहरण दे सकता है। – BALASCJP

+1

आपका मतलब है 'नई तिथि (uid.timeStamp()/10000L + 12219292800L) '? मैं आपको एक उदाहरण दे सकता हूं, लेकिन मुझे यकीन है कि आप इसे समझ सकते हैं :)। – Barend

+0

या निश्चित रूप से धन्यवाद ... – BALASCJP

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