1970年以降のミリ秒単位の時間表現に変換する必要があるSQLサーバーのタイムスタンプがあります。これをプレーンSQLで実行できますか?そうでない場合は、C#のDateTime
変数に抽出しました。これのミリ秒表現を取得することは可能ですか?
おかげで、
テジャ。
おそらく、UTCにあるUNIXライクなタイムスタンプに変換しようとしています。
yourDateTime.ToUniversalTime().Subtract(
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
).TotalMilliseconds
また、UTCにはサマータイムの問題がないため、これによりサマータイムの問題も回避されます。
C#では、次のように書くことができます
(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
.NET 4.6以降では、DateTimeOffset
オブジェクトを使用してUNIXミリ秒を取得できます。 DateTime
オブジェクトを受け取るコンストラクターがあるため、以下に示すようにオブジェクトを渡すことができます。
_DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
_
他の回答で述べたように、yourDateTime
に正しいKind
が指定されていることを確認するか、.ToUniversalTime()
を使用して最初にUTC時間に変換します。
ここDateTimeOffset
の詳細を確認できます。
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000
これでは完全な精度は得られませんが、DATEDIFF(MS...
はオーバーフローを引き起こします。秒で十分であれば、これでうまくいくはずです。
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;
}
アンドマの答えを使用して、これは私がやっていることです
このような構造体またはクラスを作成できます
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);
これがお役に立てば幸いです
アンギュラーはdate
パラターについて言います:
Dateオブジェクト、ミリ秒(文字列または数値)、またはさまざまなISO 8601日時文字列形式(たとえば、yyyy-MM-ddTHH:mm:ss.sssZおよびyyyy-MM-ddTHH:mmZ、yyyy-MMなどの短いバージョン)としてフォーマットする日付-ddまたはyyyyMMddTHHmmssZ)。文字列入力にタイムゾーンが指定されていない場合、時刻はローカルタイムゾーンにあると見なされます。
Andomarの答えは、datetimeを合計ミリ秒に変換します。
そして、あなたは以下のリンクを見るべきです。