5

タイムスタンプ付きのログテーブルにいくつかのものを保存しようとしていたので、最初にこれを行いました:

public static string TimeStamp(
   this DateTime datetime, string timestamptFormat = "yyyyMMddHHmmssffff")
   {
     return datetime.ToString(timestamptFormat);
   }

そして、次のようなスニペットを見つけました。

static public string ToReverseTimestamp(this DateTime dateTime)
{
return string.Format("{0:10}", DateTime.MaxValue.Ticks - dateTime.Ticks);
}

逆タイムスタンプは一体何に役立つのだろうと考え始め、この記事に出くわしました

私の質問は次のとおりです。2 番目のスニペットが正しいかどうか。また、それを「通常の」タイムスタンプに戻す方法、または読み取り可能な日時情報を取得する方法を教えてください。

4

1 に答える 1

3

DateTimeタイムゾーンの問題を回避するために、変換前にがユニバーサル時間に変換されていることを確認してください。

public static string ToReverseTimestamp(this DateTime dateTime)
{
    return (long.MaxValue - dateTime.ToUniversalTime().Ticks).ToString();
}

DateTimeを解析し、fromを使用して新しい値を計算および構築することにより、値stringを値にlong戻すMaxValue - (MaxValue - x) = xことができます。DateTimeDateTimeKind.Utcx

public static DateTime FromReverseTimestamp(string timestamp)
{
    return new DateTime(long.MaxValue - long.Parse(timestamp), DateTimeKind.Utc);
}

例:

var input = DateTime.Now;                      // {17/05/2012 16:03:17} (Local)
var timestamp = ToReverseTimestamp(input);     // "2520650302020786038"
var result = FromReverseTimestamp(timestamp);  // {17/05/2012 18:03:17} (Utc)
于 2012-05-17T15:58:23.840 に答える