2010-04-21 15 views
7

Fondamentalmente voglio fare quanto segue in .NET ma non ho idea di come.new Date(). GetTime() in .NET

var d = new Date().getTime() + " milliseconds since 1970/01/01" 
+0

BTW strettamente legato al ... http://stackoverflow.com/questions/906034/calculating-future-epoch-time-in-c – cyberzed

+2

Le 6 risposte Vedo che include quello che hai accettato utilizza DateTime.Now invece di DateTime.UtcNow. Credo che ciò comporterà un errato calcolo del tuo calcolo di +3.600.000 millisecondi in più della metà dell'anno negli Stati Uniti. Questa discrepanza potrebbe non essere rilevante nel tuo caso particolare ma qualcosa di cui essere consapevole. – JasDev

+1

In realtà, negli orari locali negli Stati Uniti, l'errore sarà permanentemente superiore a quello, poiché indipendentemente dal fatto che l'ora legale sia attiva o meno, tutti i fusi orari sono lontani da GMT/UTC. Quindi, hai ragione, uno * deve * usare DateTime.UtcNow. –

risposta

5

Faresti qualcosa di simile ...

var ts = DateTime.UtcNow - new DateTime(1970,1,1); 
var result = String.Format("{0} milliseconds since 1970/01/01", ts.TotalMilliseconds); 
+0

Grazie! Ho completamente dimenticato la sottostruttura. Non sono riuscito a trovare TotalMilliseconds e sono rimasto bloccato in millisecondi. –

+2

Voglio solo ricordare che dovresti anche usare le ore UTC. –

9

Io non sono davvero sicuro che si può ottenere una data di UNIX in .NET, ma avete DateTime.Now come equvivalent di new Date() (o nuova DateTime())

Come si ottenuto nel commento, è possibile ottenere un oggetto TimeSpan da doning qualcosa nelle linee di ...

(Prima risposta)

DateTime.Now.Subtract(new DateTime(1970,1,1)).TotalMilliseconds 

Aggiungendo il risultato finale per il bene del genere umano ...

var d = DateTime.Now.Subtract(new DateTime(1970,1,1).ToUniversalTime()).TotalMilliseconds + " milliseconds since 1970/01/01"; 

P.S. Dove è Jon Skeet con la sua conoscenza del momento in cui abbiamo bisogno di lui: P

+3

Love the John Skeet battaglia grida di aiuto: D – Arcturus

+2

Voglio solo notare che dovresti anche convertire in UTC –

1

Si può arrivare attraverso le strutture DateTime e TimeSpan via DateTime.Subtract, qualcosa come:

TimeSpan ts = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)); 
ts.TotalMilliseconds; // ...since The Epoch 
+1

Probabilmente dovresti usare "DateTime.UtcNow' o convertire l'ora in UTC prima di eseguire la sottrazione. –

+0

@Daniel: Giusto, sei corretto. –

-1
DateTime dt = new DateTime(); 
dt = DateTime.Now; 
TimeSpan dtNow = new TimeSpan(); 
dtNow = dt.Subtract(new DateTime(1970, 1, 1)); 
Console.WriteLine(dtNow.TotalMilliseconds); 

Bit prolisso in confronto ad altri, ma funziona.

+0

Dovresti usare 'DateTime.UtcNow' o chiamare' dt.ToUniversalTime() '. Inoltre, hai due chiamate al costruttore che sono superflue. –

+0

Grazie per averlo indicato. : o) –

2

Ho scritto un metodo di estensione per me un po 'di tempo fa.

E 'usato in questo modo:

double ticks = DateTime.UtcNow.UnixTicks(); 

Implementazione:

public static class ExtensionMethods 
{ 
    // returns the number of milliseconds since Jan 1, 1970 
       // (useful for converting C# dates to JS dates) 
    public static double UnixTicks(this DateTime dt) 
    { 
    DateTime d1 = new DateTime(1970, 1, 1); 
    DateTime d2 = dt.ToUniversalTime(); 
    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks); 

    return ts.TotalMilliseconds; 
    } 
} 
+0

L'esempio non verrà compilato. Forse intendevi 'double ticks = DateTime.UtcNow.UnixTicks();'? –

+0

Sì, grazie, penso di essere stato bloccato in Javascript! –

0

Come su

var s = string.format("{0} milliseconds since 1970/01/01", 
      (DateTime.Now - DateTime.Parse("1970/01/01")).TotalMilliseconds); 
+0

Perché hardcode la data come stringa? Inoltre, dovresti davvero fare il calcolo in UTC. –

2

sottrazione è il modo per farlo, ma tutte le risposte che ho visto finora non si regolano correttamente per UTC.

si desidera qualcosa di simile:

var ts = DateTime.UtcNow - new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc); 
var result = String.Format("{0} milliseconds since 1970/01/01", ts.TotalMilliseconds); 
Problemi correlati