web-dev-qa-db-ja.com

C#でタイムスタンプを作成する関数

日時からC#でタイムスタンプを作成する方法はありますか? Compact Frameworkでも機能するミリ秒の精度値が必要です(DateTime.ToBinary()がCFに存在しないため)。

私の問題は、この値をデータベースに依存しない方法で保存したいので、後でソートして、他の値よりも大きい値を見つけることができることです.

100
Konstantinos

私は常に次のようなものを使用します:

public static String GetTimestamp(this DateTime value)
{
    return value.ToString("yyyyMMddHHmmssfff");
}

これは、200905211035131468のような文字列を提供します。文字列は、タイムスタンプの最上位ビットからSQLクエリの単純な文字列ソートの最下位ビットに移動するため、データベースに値を固定している場合は、日付順に並べることができます

202
RobV

次を使用して、秒単位の正確なUNIXスタイルの日付スタンプを作成できると思います

//Find unix timestamp (seconds since 01/01/1970)
long ticks = DateTime.UtcNow.Ticks - DateTime.Parse("01/01/1970 00:00:00").Ticks;
ticks /= 10000000; //Convert windows ticks to seconds
timestamp = ticks.ToString();

分母を調整すると、精度のレベルを選択できます

41
Voxel

DateTime.Ticksプロパティを使用できます。このプロパティは、長くて普遍的に保存可能で、コンパクトフレームワークでも常に増加して使用可能です。 9999年12月31日以降はコードが使用されないようにしてください;)

19
Frans Bouma

使用することもできます

Stopwatch.GetTimestamp()。ToString();

7
mgokhanbakal

数秒で必要な場合:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
3
Adi_Pithwa

実際のリアルタイムに対応するタイムスタンプが必要な場合、ただし特定のアプリケーションインスタンスに対して一意にすることも必要な場合は、次のコードを使用できます。

public class HiResDateTime
{
   private static long lastTimeStamp = DateTime.UtcNow.Ticks;
   public static long UtcNowTicks
   {
       get
       {
           long orig, newval;
           do
           {
               orig = lastTimeStamp;
               long now = DateTime.UtcNow.Ticks;
               newval = Math.Max(now, orig + 1);
           } while (Interlocked.CompareExchange
                        (ref lastTimeStamp, newval, orig) != orig);

           return newval;
       }
   }
}
3
Ian Mercer