Java System.currentTimeMillis () C # के बराबर


जवाबों:


90

एक विकल्प:

private static readonly DateTime Jan1st1970 = new DateTime
    (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static long CurrentTimeMillis()
{
    return (long) (DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}

2
"DateTimeOffset.UtcNow.ToUnixTimeMilliseconds ()" के साथ समान परिणाम
रामूनास

74

जावा में एक सामान्य मुहावरा currentTimeMillis()समय या शेड्यूलिंग उद्देश्यों के लिए उपयोग करना है, जहां आप 1970 के बाद से वास्तविक मिलीसेकंड में रुचि नहीं रखते हैं, लेकिन इसके बजाय कुछ सापेक्ष मूल्य की गणना करें और currentTimeMillis()उस मूल्य के बाद के चालान की तुलना करें ।

यदि आप जो खोज रहे हैं, वह C # समतुल्य है Environment.TickCount


1
लेकिन वे दोनों अंतर संख्या देते हैं। वे कैसे सही ढंग से तुलना करते हैं ?? C# give : 2688547औरJava give : 1390707872687
एलशान

1
@ इल्शान आप उनकी तुलना नहीं कर सकते। वे अलग टिक रहे हैं। यह तकनीक एक अनुप्रयोग के भीतर समय और समयबद्धन के लिए है, न कि अनुप्रयोगों में।
Barend

System.currentTimeMillis()एमटीसी में 1970 से यूटीसी समय देता है, जबकि Environment.TickCountऐप शुरू होने के बाद से एमएस करता है। System.currentTimeMillis()बीते हुए समय की जाँच करने के लिए अच्छा है, लेकिन अगर आप चाहते हैं कि दो अवतरण तुलनीय होने चाहिए, तो आपको उनका उपयोग अवश्य करना चाहिए System.nanoTime()
michelpm

12

यदि आप TIMING में रुचि रखते हैं, तो System.Diagnostics का संदर्भ जोड़ें और स्टॉपवॉच का उपयोग करें।

उदाहरण के लिए:

var sw = Stopwatch.StartNew();
...
var elapsedStage1 = sw.ElapsedMilliseconds;
...
var elapsedStage2 = sw.ElapsedMilliseconds;
...
sw.Stop();


7

System.currentTimeMillis()जावा में 1970/01/01 से मिलीसेकेंड में वर्तमान समय देता है

c # जो होगा

public static double GetCurrentMilli()
    {
        DateTime Jan1970 = new DateTime(1970, 1, 1, 0, 0,0,DateTimeKind.Utc);
        TimeSpan javaSpan = DateTime.UtcNow - Jan1970;
        return javaSpan.TotalMilliseconds;
    }

संपादित करें: इसे utc जैसा कि सुझाव दिया गया :)


4
DateTime.Now स्थानीय समय का उपयोग करता है, UTC का नहीं। मुझे नहीं पता कि जब आप किसी स्थानीय व्यक्ति से किसी अज्ञात प्रकार के डेटटाइम को घटाते हैं, तो क्या होता है, लेकिन यूटीसी :)
जॉन स्कीट

7

हम थोड़ा सा फैंसी भी प्राप्त कर सकते हैं और इसे एक विस्तार विधि के रूप में कर सकते हैं, ताकि यह डेटाइम क्लास से लटका रहे:

public static class DateTimeExtensions
{
    private static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    public static long currentTimeMillis(this DateTime d)
    {
        return (long) ((DateTime.UtcNow - Jan1st1970).TotalMilliseconds);
    }
}

3
क्या यह थोड़ा गलत नहीं है? यह एक्सटेंशन विधि DateTime के किसी भी उदाहरण को सौंप देगी , लेकिन यह उदाहरण का उपयोग नहीं करता है। बस भ्रामक लगता है ... मुझे नहीं लगता कि आपको एक पैरामीटर की आवश्यकता होनी चाहिए जिसका आप उपयोग नहीं करते हैं
मोर्टब

1
@mortb यह एक विस्तार विधि है। यह है कि यह वर्ग को संशोधित किए बिना एक वर्ग में "एक विधि जोड़ने" के लिए सी # में परिभाषित हो जाता है। संकलक विधि की व्याख्या करता है और इसे "यह" पैरामीटर की एक आवृत्ति पर लागू कर सकता है जैसे कि यह वर्ग पर ही एक आवृत्ति विधि थी। यह स्थिर वर्ग पर एक विधि के समान ही कार्य करता है लेकिन संकलक एक आसान, वैकल्पिक वाक्यविन्यास लिखने की अनुमति देता है।
सनकैट

1
समस्या यह है कि पैरामीटर के मूल्य का dउपयोग नहीं किया जाता है। इस कोड का उपयोग करने के लिए आप लिख सकते हैं var date = new DateTime(); var millis = date.currentTimeMillis();लेकिन dateचर सिर्फ निरर्थक होगा और इसका राज्य कभी उपयोग नहीं करेगा। जब एक्सटेंशन विधि बनाने वाली वस्तु की स्थिति का उपयोग नहीं किया जाता है तो केवल कोड को अस्पष्ट करता है। @ हथ द्वारा प्रदान किया गया उत्तर अधिक सीधा है और इसलिए बेहतर है (मेरे लिए)। हो सकता है @Joel Coehoorn का इरादा विधि शरीर के dबजाय मान का उपयोग करना हो DateTime.UtcNow? मैं विस्तार विधियों का उपयोग बहुत करता हूं, लेकिन इसके लिए नहीं।
मोर्टब

आप एक एक्सटेंशन क्यों बनाएंगे, जो तारीख का उपयोग नहीं करता है? मैंने इस कोड का उपयोग किया और इसने मुझे पकड़ा। सही संस्करण है: वापसी (लंबी) ((d.ToUniversalTime () - Jan1st1970) .TotalMilliseconds);
मार्क जी

4

यहां यूनिक्स टाइमस्टैम्प को अनुमानित करने का एक सरल तरीका है। UTC का उपयोग करना यूनिक्स अवधारणा के करीब है, और आपको इसमें से गुप्त करने की आवश्यकता doubleहै long

TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
long millis = (long)ts.TotalMilliseconds;
Console.WriteLine("millis={0}", millis);

प्रिंट:

millis=1226674125796

वास्तव में मुझे क्या चाहिए
अजीबोला

3

1970 के बाद से फ्रेमवर्क में पुराने सेकंड (या मिलीसेकंड) शामिल नहीं हैं। आपको जो निकटतम मिल रहा है वह DateTime.Ticks है, जो कि 1 0001 के बाद से 100-नैनोसेकंड की संख्या है।


1
होगा (DateTime.Ticks / 10000000) - (0001 और 1970 के बीच सेकंड की संख्या) एक सटीक उत्तर दें?
लियाम

3

मैं सिर्फ सबसे सीधे आगे के तरीके पर विचार करता हूं कि आप किस तरह से प्राप्त करने के लिए प्रयास कर रहे हैं:

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond

1
DateTime.UtcNowएक बेहतर विकल्प है
मेहदी खड़मलो

2

यदि आप चाहते हैं कि विभिन्न प्रक्रियाओं, विभिन्न भाषाओं (Java, C, C #), के बीच GNU / Linux और Windows (सात कम से कम) के बीच एक टाइमस्टैम्प की तुलना की जाए:

सी#:

private static long nanoTime() {
   long nano = 10000L * Stopwatch.GetTimestamp();
   nano /= TimeSpan.TicksPerMillisecond;
   nano *= 100L;
   return nano;
}

जावा:

java.lang.System.nanoTime();

सी ग्नू / लिनक्स:

static int64_t hpms_nano() {
   struct timespec t;
   clock_gettime( CLOCK_MONOTONIC, &t );
   int64_t nano = t.tv_sec;
   nano *= 1000;
   nano *= 1000;
   nano *= 1000;
   nano += t.tv_nsec;
   return nano;
}

सी विंडोज:

static int64_t hpms_nano() {
   static LARGE_INTEGER ticksPerSecond;
   if( ticksPerSecond.QuadPart == 0 ) {
      QueryPerformanceFrequency( &ticksPerSecond );
   }
   LARGE_INTEGER ticks;
   QueryPerformanceCounter( &ticks );
   uint64_t nano = ( 1000*1000*10UL * ticks.QuadPart ) / ticksPerSecond.QuadPart;
   nano *= 100UL;
   return nano;
}

1

मुझे पता है कि प्रश्न समकक्ष के लिए पूछता है, लेकिन चूंकि मैं उन 2 कार्यों का उपयोग करता हूं जो मैं GetTickCount में फेंकता हूं । मैं उदासीन हो सकता हूं, लेकिन System.currentTimeMillis () और GetTickCount () केवल वही हैं जो मैं टिक पाने के लिए उपयोग करता हूं।

[DllImport("kernel32.dll")]
static extern uint GetTickCount();

// call
uint ticks = GetTickCount();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.