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"
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"
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);
Grazie! Ho completamente dimenticato la sottostruttura. Non sono riuscito a trovare TotalMilliseconds e sono rimasto bloccato in millisecondi. –
Voglio solo ricordare che dovresti anche usare le ore UTC. –
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
Love the John Skeet battaglia grida di aiuto: D – Arcturus
Voglio solo notare che dovresti anche convertire in UTC –
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
Probabilmente dovresti usare "DateTime.UtcNow' o convertire l'ora in UTC prima di eseguire la sottrazione. –
@Daniel: Giusto, sei corretto. –
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.
Dovresti usare 'DateTime.UtcNow' o chiamare' dt.ToUniversalTime() '. Inoltre, hai due chiamate al costruttore che sono superflue. –
Grazie per averlo indicato. : o) –
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;
}
}
L'esempio non verrà compilato. Forse intendevi 'double ticks = DateTime.UtcNow.UnixTicks();'? –
Sì, grazie, penso di essere stato bloccato in Javascript! –
Come su
var s = string.format("{0} milliseconds since 1970/01/01",
(DateTime.Now - DateTime.Parse("1970/01/01")).TotalMilliseconds);
Perché hardcode la data come stringa? Inoltre, dovresti davvero fare il calcolo in UTC. –
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);
BTW strettamente legato al ... http://stackoverflow.com/questions/906034/calculating-future-epoch-time-in-c – cyberzed
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
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. –