जावा System.currentTimeMillis()
# के C # के बराबर क्या है ?
जवाबों:
एक विकल्प:
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;
}
जावा में एक सामान्य मुहावरा currentTimeMillis()
समय या शेड्यूलिंग उद्देश्यों के लिए उपयोग करना है, जहां आप 1970 के बाद से वास्तविक मिलीसेकंड में रुचि नहीं रखते हैं, लेकिन इसके बजाय कुछ सापेक्ष मूल्य की गणना करें और currentTimeMillis()
उस मूल्य के बाद के चालान की तुलना करें ।
यदि आप जो खोज रहे हैं, वह C # समतुल्य है Environment.TickCount
।
C# give : 2688547
औरJava give : 1390707872687
System.currentTimeMillis()
एमटीसी में 1970 से यूटीसी समय देता है, जबकि Environment.TickCount
ऐप शुरू होने के बाद से एमएस करता है। System.currentTimeMillis()
बीते हुए समय की जाँच करने के लिए अच्छा है, लेकिन अगर आप चाहते हैं कि दो अवतरण तुलनीय होने चाहिए, तो आपको उनका उपयोग अवश्य करना चाहिए System.nanoTime()
।
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 जैसा कि सुझाव दिया गया :)
हम थोड़ा सा फैंसी भी प्राप्त कर सकते हैं और इसे एक विस्तार विधि के रूप में कर सकते हैं, ताकि यह डेटाइम क्लास से लटका रहे:
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);
}
}
d
उपयोग नहीं किया जाता है। इस कोड का उपयोग करने के लिए आप लिख सकते हैं var date = new DateTime(); var millis = date.currentTimeMillis();
लेकिन date
चर सिर्फ निरर्थक होगा और इसका राज्य कभी उपयोग नहीं करेगा। जब एक्सटेंशन विधि बनाने वाली वस्तु की स्थिति का उपयोग नहीं किया जाता है तो केवल कोड को अस्पष्ट करता है। @ हथ द्वारा प्रदान किया गया उत्तर अधिक सीधा है और इसलिए बेहतर है (मेरे लिए)। हो सकता है @Joel Coehoorn का इरादा विधि शरीर के d
बजाय मान का उपयोग करना हो DateTime.UtcNow
? मैं विस्तार विधियों का उपयोग बहुत करता हूं, लेकिन इसके लिए नहीं।
यहां यूनिक्स टाइमस्टैम्प को अनुमानित करने का एक सरल तरीका है। 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
1970 के बाद से फ्रेमवर्क में पुराने सेकंड (या मिलीसेकंड) शामिल नहीं हैं। आपको जो निकटतम मिल रहा है वह DateTime.Ticks है, जो कि 1 0001 के बाद से 100-नैनोसेकंड की संख्या है।
मैं सिर्फ सबसे सीधे आगे के तरीके पर विचार करता हूं कि आप किस तरह से प्राप्त करने के लिए प्रयास कर रहे हैं:
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond
DateTime.UtcNow
एक बेहतर विकल्प है
यदि आप चाहते हैं कि विभिन्न प्रक्रियाओं, विभिन्न भाषाओं (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;
}
मुझे पता है कि प्रश्न समकक्ष के लिए पूछता है, लेकिन चूंकि मैं उन 2 कार्यों का उपयोग करता हूं जो मैं GetTickCount में फेंकता हूं । मैं उदासीन हो सकता हूं, लेकिन System.currentTimeMillis () और GetTickCount () केवल वही हैं जो मैं टिक पाने के लिए उपयोग करता हूं।
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
// call
uint ticks = GetTickCount();