web-dev-qa-db-ja.com

ミリ秒単位のDateTimeの表現?

1970年以降のミリ秒単位の時間表現に変換する必要があるSQLサーバーのタイムスタンプがあります。これをプレーンSQLで実行できますか?そうでない場合は、C#のDateTime変数に抽出しました。これのミリ秒表現を取得することは可能ですか?

おかげで、
テジャ。

66

おそらく、UTCにあるUNIXライクなタイムスタンプに変換しようとしています。

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

また、UTCにはサマータイムの問題がないため、これによりサマータイムの問題も回避されます。

124
Andomar

C#では、次のように書くことができます

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

.NET 4.6以降では、DateTimeOffsetオブジェクトを使用してUNIXミリ秒を取得できます。 DateTimeオブジェクトを受け取るコンストラクターがあるため、以下に示すようにオブジェクトを渡すことができます。

_DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
_

他の回答で述べたように、yourDateTimeに正しいKindが指定されていることを確認するか、.ToUniversalTime()を使用して最初にUTC時間に変換します。

ここDateTimeOffsetの詳細を確認できます。

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

これでは完全な精度は得られませんが、DATEDIFF(MS...はオーバーフローを引き起こします。秒で十分であれば、これでうまくいくはずです。

3
user565869

DatetimeをUNIXタイムスタンプ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

アンドマの答えを使用して、これは私がやっていることです

このような構造体またはクラスを作成できます

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

    }

そして、次のようにコードでこれを使用できます

DateTime dateTime = DateTime.Now;

double total = Date.GetTime(dateTime);

dateTime = Date.DateTimeParse(total);

これがお役に立てば幸いです

1
Pablo V

アンギュラーはdateパラターについて言います:

Dateオブジェクト、ミリ秒(文字列または数値)、またはさまざまなISO 8601日時文字列形式(たとえば、yyyy-MM-ddTHH:mm:ss.sssZおよびyyyy-MM-ddTHH:mmZ、yyyy-MMなどの短いバージョン)としてフォーマットする日付-ddまたはyyyyMMddTHHmmssZ)。文字列入力にタイムゾーンが指定されていない場合、時刻はローカルタイムゾーンにあると見なされます。

Andomarの答えは、datetimeを合計ミリ秒に変換します。

そして、あなたは以下のリンクを見るべきです。

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

DateTimeオブジェクトの場合、文字列形式でISO 8601日付を取得するにはどうすればよいですか?

0
ddagsan