2010-04-21 9 views
7

Grundsätzlich möchte ich das unten in .NET tun, aber ich habe keine Ahnung, wie.new Date(). GetTime() in .NET

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

BTW eng verwandt mit ... http://stackoverflow.com/questions/906034/calculating-future-epoch-time-in-c – cyberzed

+2

Die 6 Antworten Ich sehe, dass die von Ihnen akzeptierte DateTime.Now anstelle von DateTime.UtcNow verwendet. Ich glaube, das wird dazu führen, dass Ihre Berechnung um +3.600.000 Millisekunden mehr als die Hälfte des Jahres in den USA falsch ist. Diese Diskrepanz spielt in Ihrem speziellen Fall keine Rolle, muss jedoch beachtet werden. – JasDev

+1

Tatsächlich wird der Fehler in lokalen Zeiten in den USA permanent größer sein, da unabhängig davon, ob DST aktiv ist oder nicht, alle Zeitzonen weit von GMT/UTC entfernt sind. Also, du hast recht, man muss DateTime.UtcNow benutzen. –

Antwort

5

Sie würden so etwas tun ...

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

Vielen Dank! Subtraktion habe ich völlig vergessen. Ich konnte TotalMilliseconds nicht finden und blieb bei Millisekunden hängen. –

+2

Ich möchte nur darauf hinweisen, dass Sie auch UTC-Zeiten verwenden sollten. –

9

Ich bin nicht wirklich sicher, dass Sie ein UNIX-Datum in .NET bekommen, aber Sie haben DateTime.Now als equvivalent von new Date() (oder eine neue Datetime())

Wie Sie bekam im Kommentar, dann ist es möglich, ein Timespan-Objekt zu erhalten, indem der etwas in den Zeilen doning ...

(Erste Antwort)

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

das Endergebnis zum Wohle der Menschheit Hinzufügen ...

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

P.S. Wo ist Jon Skeet mit seinem Wissen der Zeit, wenn wir ihn brauchen: P

+3

Liebe John Skeet Kampf Schrei um Hilfe: D – Arcturus

+2

Ich möchte nur, dass Sie auch in UTC konvertieren –

1

Sie können dort über DateTime.Subtract über die DateTime und TimeSpan Strukturen bekommen, etwas wie:

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

Sie sollten wahrscheinlich 'DateTime.UtcNow' verwenden oder die Zeit vor der Subtraktion in UTC umwandeln. –

+0

@Daniel: Ganz richtig du bist, behoben. –

-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 langatmig im Vergleich zu anderen, aber es funktioniert.

+0

Sie sollten 'DateTime.UtcNow' verwenden oder' dt.ToUniversalTime() 'aufrufen. Außerdem haben Sie zwei Konstruktoraufrufe, die überflüssig sind. –

+0

Vielen Dank, dass Sie darauf hingewiesen haben. : o) –

2

Ich schrieb eine Erweiterungs-Methode für mich selbst vor einer Weile.

double ticks = DateTime.UtcNow.UnixTicks(); 

Umsetzung::

Es ist wie so verwendet wird

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

Ihr Beispiel wird nicht kompiliert. Vielleicht meintest du 'double ticks = DateTime.UtcNow.UnixTicks();'? –

+0

Ja - danke, ich glaube, ich steckte in Javascript fest! –

0

Wie wäre es

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

Warum das Datum als String hartcodieren? Außerdem sollten Sie die Berechnung in UTC durchführen. –

2

Subtraction die Art und Weise, es zu tun ist, aber alle Antworten habe ich gesehen, soweit nicht richtig auf UTC einstellen.

Sie wollen so etwas wie:

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); 
Verwandte Themen