2010-09-14 17 views
21

में समतुल्य समयावधि दिनांक समय के जावा समकक्ष क्या है। सी # में पसंद है?सी # डेटटाइम। जावा

DateTime dt = new DateTime(2010, 9, 14, 0, 0, 0); 
Console.WriteLine("Ticks: {0}", dt.Ticks); 

जावा में उपर्युक्त कोड के बराबर क्या होगा?

उत्तर

35

खैर, java.util.Date/Calendar केवल परिशुद्धता मिलीसेकंड करने के लिए नीचे है:

Calendar calendar = Calendar.getInstance();  
calendar.set(Calendar.MILLISECOND, 0); // Clear the millis part. Silly API. 
calendar.set(2010, 8, 14, 0, 0, 0); // Note that months are 0-based 
Date date = calendar.getTime(); 
long millis = date.getTime(); // Millis since Unix epoch 

निकटतम प्रभावी बराबर है यही कारण है कि। यदि आपको .NET टिक मान और Date/Calendar के बीच कनवर्ट करने की आवश्यकता है तो आपको मूल रूप से स्केलिंग (मिलिस पर टिकटें) और ऑफसेटिंग (1 जनवरी 1AD से 1 जनवरी 1 9 70) करने की आवश्यकता है।

जावा की अंतर्निहित तिथि और समय एपीआई काफी अप्रिय हैं। मैं व्यक्तिगत रूप से अनुशंसा करता हूं कि आप इसके बजाय Joda Time का उपयोग करें। यदि आप कह सकते हैं कि आप वास्तव में क्या करने की कोशिश कर रहे हैं, तो हम और अधिक मदद कर सकते हैं।

संपादित करें: ठीक है, यहाँ कुछ नमूना कोड:

import java.util.*; 

public class Test { 

    private static final long TICKS_AT_EPOCH = 621355968000000000L; 
    private static final long TICKS_PER_MILLISECOND = 10000; 

    public static void main(String[] args) { 
     long ticks = 634200192000000000L; 

     Date date = new Date((ticks - TICKS_AT_EPOCH)/TICKS_PER_MILLISECOND); 
     System.out.println(date); 

     TimeZone utc = TimeZone.getTimeZone("UTC"); 
     Calendar calendar = Calendar.getInstance(utc); 
     calendar.setTime(date); 
     System.out.println(calendar); 
    } 
} 

ध्यान दें कि यह एक दिनांक/कैलेंडर 2019/09/14 के यूटीसी तत्काल का प्रतिनिधित्व निर्माण करती है। .NET प्रतिनिधित्व कुछ हद तक अस्पष्ट है - आप दो डेटटाइम मान बना सकते हैं जो उनके "दयालु" को छोड़कर समान हैं (लेकिन इसलिए विभिन्न प्रतिभागियों का प्रतिनिधित्व करते हैं) और वे बराबर होने का दावा करेंगे। यह एक गड़बड़ :(

+0

मेरे वर्तमान परिदृश्य मैं सी # में गणना Ticks मूल्य बचा लिया है; अब मैं जो चाहता हूं उसे पढ़ा गया है और जावा में एक ही तारीख प्राप्त करें। –

+1

@Asoo: ठीक है। एटीएम काम करने के लिए चलना - बीस मिनट में कोड। मूल रूप से प्रति मिलीसेकंद के द्वारा विभाजित और ऑफसेट घटाएं। आपको टाइमज़ोन ऑफ़सेट को ध्यान में रखना चाहिए। –

+0

धन्यवाद @ स्केट .... लेकिन अगर मैं जावा में टिकों की गणना करना चाहता हूं और उन्हें सी # में पढ़ना चाहता हूं ..... मैंने कोशिश की लेकिन यह समान मान नहीं देता है: टाइमज़ोन utc = TimeZone.getTimeZone ("UTC"); कैलेंडर कैलेंडर = कैलेंडर.getInstance (utc); कैलेंडर.सेट (2010,8,14,0,0,0); System.out.println (calendar.getTimeInMillis() * TICKS_PER_MILLISECOND + TICKS_AT_EPOCH); –

8

System.nanoTime() का एक सा जावा (1.6 के बाद से) में आप नैनोसेकंड देता है। तुम अब भी बदलाव/rescale करने की आवश्यकता होगी, लेकिन कोई सटीक खो जाएगा।

+0

नैनोटाइम घड़ी के समय के साथ कुछ भी नहीं है, जिसका मतलब है कि इसे .NET डेटटाइम से टिक्स के साथ परिवर्तित या तुलना नहीं किया जा सकता है। यहां जावाडोक से उद्धरण दिया गया है: इस विधि का उपयोग केवल समाप्त समय को मापने के लिए किया जा सकता है और सिस्टम या दीवार घड़ी के किसी भी अन्य विचार से संबंधित नहीं है। लौटाया गया मान कुछ निश्चित लेकिन मनमाने ढंग से समय के बाद नैनोसेकंड का प्रतिनिधित्व करता है (शायद भविष्य में, तो मूल्य नकारात्मक हो सकते हैं)। – Stas

12

जावा में है:

long TICKS_AT_EPOCH = 621355968000000000L; 
long tick = System.currentTimeMillis()*10000 + TICKS_AT_EPOCH; 
+1

यह उत्तर है ... धन्यवाद –

0

जावा उपयोग में मिली सेकंड के लिए नेट Ticks परिवर्तित करने के लिए इस:

static final long TICKS_PER_MILLISECOND = 10000; 
long ticks = 450000000000L; // sample tick value 
long millis = (ticks/TICKS_PER_MILLISECOND); 
1

जॉन स्कीट के आधार पर मैं इस वर्ग विकसित

import java.util.Calendar; 
import java.util.Date; 

public class DateHelper { 

    private static final long TICKS_AT_EPOCH = 621355968000000000L; 
    private static final long TICKS_PER_MILLISECOND = 10000; 

    public static long getUTCTicks(Date date){ 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(date); 

     return (calendar.getTimeInMillis() * TICKS_PER_MILLISECOND) + TICKS_AT_EPOCH; 

    } 

    public static Date getDate(long UTCTicks){ 

     return new Date((UTCTicks - TICKS_AT_EPOCH)/TICKS_PER_MILLISECOND); 

    } 

} 

यह मेरे लिए काम करता

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