2008-11-14 16 views

cevap

3

1970 yılından beri eski saniyede (veya milisaniye) içermez çerçeve almak en yakın 100 nanosaniye sayısı 1 Ocak 0001.

+1

(DateTime.Ticks/10000000) - (0001 ile 1970 arasındaki saniye sayısı) doğru bir cevap verir mi? – Liam

85

bir alternatif beri olduğu DateTime.Ticks geçerli:

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; 
} 
6

java System.currentTimeMillis() olacağını 1970/01/01

C# dan milisaniye olarak geçerli zamanı döndüren

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

düzenleme: önerilen şekliyle utc :)

+3

DateTime.Now yerel saati kullanır, UTC'yi değil. Bilinmeyen bir DateTime'ı yerel birinden çıkardığınızda tam olarak ne olduğunu bilmiyorum, ancak her ikisini de tam olarak ihtiyacım olan UTC'ye ( –

4

Unix zaman damgasını tahmin etmenin kolay bir yolu. UTC'yi kullanmak unix konseptine daha yakındır ve double'dan long'a gizlemeniz gerekir.

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

baskılar:

millis=1226674125796 
+0

) ayarlamak en iyisidir. – Ajibola

8

Biz de biraz fantezi olsun ve DateTime sınıfı sarkacak şekilde, bir uzatma yöntemi olarak bunu yapabilir:

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); 
    } 
} 
+0

Bulunduğunuz dillerin ilginç bir karışımı;) –

+0

Lol! Bunu bazen yapıyorum: ikisi arasında çok fazla değişiklik yapmak zorundayım, ama normalde IDE'de olduğu için anında geri bildirim aldım. –

+2

Bu biraz yanlış değil mi? Bu uzantı yöntemi, DateTime'ın herhangi bir * örneğine * teslim eder, ancak örneği kullanmaz. Sadece kafa karıştırıcı görünüyor ... – mortb

61

ortak deyim Java, zamanlama veya planlama amaçları için currentTimeMillis()'u kullanmaktır, burada 1970'den beri gerçek milisaniye ile ilgilenmezsiniz, ancak bunun yerine bazı göreceli değerleri hesaplayın ve daha sonra gelenleri karşılaştırın Bu değere currentTimeMillis() iyonları.

Aradığın buysa, C# eşdeğeri Environment.TickCount'dur.

+1

kullanmadığınız bir parametre gerektiğini düşünmüyorum Ama ikisi de farklı sayılar verir.Nasıl doğru karşılaştırın? 'C# ver: 2688547' ve' Java ver: 1390707872687' – Elshan

+0

@Elshan Onları karşılaştıramazsınız. Onlar farklı keneler. Bu teknik, uygulamalar arasında değil, bir uygulama içinde zamanlama ve zamanlama içindir. – Barend

+0

'System.currentTimeMillis()', 1970'den beri ms cinsinden UTC zamanını döndürürken, “Environment.TickCount” uygulaması başladığından beri msn döndürür. System.currentTimeMillis() ', geçen süreyi kontrol etmek için iyidir, ancak iki sürenin karşılaştırılabilir olmasını istiyorsanız, 'System.nanoTime()' işlevini kullanmalısınız. – michelpm

8

ZAMANLAMA ile ilgileniyorsanız, System.Diagnostics'e bir başvuru ekleyin ve Kronometre kullanın. Örneğin

:

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

ben soru eşdeğer sorar biliyorum ama aynı görevler için bu 2 kullanmak beri GetTickCount atmak. Nostaljik olabilirim, ancak kene almak için kullandığım System.currentTimeMillis() ve GetTickCount() benimdir.

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

// call 
uint ticks = GetTickCount(); 
3

Sadece düşünün en düz yol nasıl ulaşılacağını ne şöyle için gayret ettik:

DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond 
+1

'DateTime.UtcNow' daha iyi bir seçenektir –

1

bir zaman damgası farklı süreçler, farklı diller arasında karşılaştırılabilir istiyorsanız (GNU/Linux ve Windows altında Java, C, C#), (Yedi en azından):

C#:

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

Java:

java.lang.System.nanoTime(); 

C GNU/Linux:

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; 
} 

C Pencereler:

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; 
}