1970年以降のミリ秒単位の時間表現に変換する必要があるSQLサーバーのタイムスタンプがあります。これをプレーンSQLで実行できますか?そうでない場合は、DateTimeC#の変数に抽出しました。これのミリ秒表現を取得することは可能ですか?
ありがとう、
テジャ。
1970年以降のミリ秒単位の時間表現に変換する必要があるSQLサーバーのタイムスタンプがあります。これをプレーンSQLで実行できますか?そうでない場合は、DateTimeC#の変数に抽出しました。これのミリ秒表現を取得することは可能ですか?
ありがとう、
テジャ。
回答:
おそらく、UTCであるUNIXライクなタイムスタンプに変換しようとしています。
yourDateTime.ToUniversalTime().Subtract(
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
).TotalMilliseconds
UTCには夏季の問題がないため、これにより夏季の問題も回避されます。
DateTimeそしてTimeSpan全体ミリ秒よりも高い精度でその値を格納します。0.79ミリ秒= 7900ティック。整数が必要な場合は、を使用できますlong ms = myTimeSpan.TotalTicks / 10000;。
DateTime.UnixEpochでは、日付を宣言する代わりに使用できます。
DateTimeの契約のメモを見てくださいToUniversalTime)が現地時間にあると想定していますが、そうではありませんでした。たとえば、時間をサンプリングするのが一般的であるDateTime.UtcNowか、別のタイムゾーンにある可能性があります。
C#では、次のように書くことができます
(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
long代わりにキャストすることをお勧めしintます
new DateTime(1970, 1, 1).AddMilliseconds(myDateAsALong);逆に行きたい場合。
AddMilliseconds()タイプのパラメータが必要ですdouble。暗黙の変換がそれを処理しますが、注目に値するかもしれません。
int.MaxValueミリ秒単位で約25日です。それが役に立たない可能性があります。
.NET 4.6以降、DateTimeOffsetオブジェクトを使用してUNIXミリ秒を取得できます。DateTimeオブジェクトを受け取るコンストラクターがあるので、以下に示すようにオブジェクトを渡すことができます。
DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
他の回答に記載されているようyourDateTimeに、正しくKind指定されていることを確認するか、.ToUniversalTime()最初にUTC時間に変換するために使用してください。
ここでは、について詳しく知ることができますDateTimeOffset。
.Nowはこの質問に直接適用されません。
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000
これでは完全な精度は得られませんがDATEDIFF(MS...、オーバーフローが発生します。秒で十分であれば、これで十分です。
unixtimestampmillis 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);
これがお役に立てば幸いです
(now - Epoch).TotalMilliseconds、ここでnow、EpochはDateTimeオブジェクトです。