it-swarm.com.de

DateTime-Darstellung in Millisekunden?

Ich habe einen SQL-Server-Zeitstempel, den ich seit 1970 in Millisekunden in eine Darstellung der Zeit konvertieren muss. Kann ich dies mit einfachem SQL tun? Wenn nicht, habe ich es in C # in eine Variable DateTime extrahiert. Ist es möglich, eine Millisekendarstellung davon zu erhalten?

Vielen Dank, 
Teja.

59

Sie versuchen wahrscheinlich, in einen UNIX-ähnlichen Zeitstempel umzuwandeln, der sich in UTC befindet:

yourDateTime.ToUniversalTime().Subtract(
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    ).TotalMilliseconds

Dadurch werden auch Probleme mit Sommerzeit vermieden, da UTC diese nicht hat.

111
Andomar

In C # können Sie schreiben

(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
56
SLaks

Ab .NET 4.6 können Sie ein DateTimeOffset-Objekt verwenden, um die Unix-Millisekunden abzurufen. Es verfügt über einen Konstruktor, der ein DateTime-Objekt übernimmt, sodass Sie Ihr Objekt wie unten gezeigt übergeben können.

DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();

Wie in anderen Antworten erwähnt, stellen Sie sicher, dass für yourDateTime die richtige Kind angegeben ist, oder verwenden Sie .ToUniversalTime(), um sie zuerst in UTC-Zeit umzuwandeln.

Hier erfahren Sie mehr über DateTimeOffset.

18
Bob
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000

Dies gibt Ihnen keine volle Genauigkeit, aber DATEDIFF(MS... verursacht einen Überlauf. Wenn Sekunden gut genug sind, sollte dies dies tun.

3
user565869

Diese andere Lösung zum Konvertieren von datetime in unix timestamp millis C #.

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static long GetCurrentUnixTimestampMillis()
{
    DateTime localDateTime, univDateTime;
    localDateTime = DateTime.Now;          
    univDateTime = localDateTime.ToUniversalTime();
    return (long)(univDateTime - UnixEpoch).TotalMilliseconds;
} 
2
samsanthosh2008

Mit der Antwort von Andoma mache ich das

Sie können eine Struktur oder eine Klasse wie diese erstellen

struct Date
    {
        public static double GetTime(DateTime dateTime)
        {
            return dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
        }

        public static DateTime DateTimeParse(double milliseconds)
        {
            return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds).ToLocalTime();
        }

    }

Und Sie können dies in Ihrem Code wie folgt verwenden

DateTime dateTime = DateTime.Now;

double total = Date.GetTime(dateTime);

dateTime = Date.DateTimeParse(total);

Ich hoffe das hilft dir

1
Pablo V

winkel sagt über date parater:

Datum zum Formatieren entweder als Date-Objekt, Millisekunden (Zeichenfolge oder Zahl) oder verschiedene ISO 8601-Datetime-Zeichenkettenformate (z. B. JJJJ-MM-TTHTH: mm: ss.sssZ und ihre kürzeren Versionen wie JJJJ-MM-TTHTH: MMZ, JJJJ-MM-TT oder JJJJMMddTHHmmssZ). Wenn keine Zeitzone ist In der Zeichenfolgeingabe angegeben, wird die Zeit als in .__ angesehen. lokale Zeitzone.

Die Antwort von Andomar wird in Datumszeit in Millisekunden insgesamt umgewandelt.

Und Sie sollten folgenden Links folgen.

https://docs.angularjs.org/api/ng/filter/date

Wie erhalte ich bei einem DateTime-Objekt ein ISO 8601-Datum im String-Format?

0
ddagsan