C# で datetime からタイムスタンプを作成する方法はありますか? Compact Framework でも機能するミリ秒の精度値が必要です (DateTime.ToBinary() が CF に存在しないため)。
私の問題は、この値をデータベースに依存しない方法で保存したいので、後で並べ替えて、どの値が別の値よりも大きいかなどを見つけることができることです.
C# で datetime からタイムスタンプを作成する方法はありますか? Compact Framework でも機能するミリ秒の精度値が必要です (DateTime.ToBinary() が CF に存在しないため)。
私の問題は、この値をデータベースに依存しない方法で保存したいので、後で並べ替えて、どの値が別の値よりも大きいかなどを見つけることができることです.
次を使用して、1秒単位で正確な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();
分母を調整すると、精度のレベルを選択できます
DateTime.Ticks プロパティを使用できます。これは、コンパクトなフレームワークでも常に増加し、使用可能な、長くて普遍的な保存可能です。コードが 9999 年 12 月 31 日以降に使用されていないことを確認してください ;)
実際のリアルタイムに対応するタイムスタンプが必要であるが、(特定のアプリケーション インスタンスに対して) 一意であることも必要な場合は、次のコードを使用できます。
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;
}
}
}