日時からC#でタイムスタンプを作成する方法はありますか? Compact Frameworkでも機能するミリ秒の精度値が必要です(DateTime.ToBinary()がCFに存在しないため)。
私の問題は、この値をデータベースに依存しない方法で保存したいので、後でソートして、他の値よりも大きい値を見つけることができることです.
私は常に次のようなものを使用します:
public static String GetTimestamp(this DateTime value)
{
return value.ToString("yyyyMMddHHmmssfff");
}
これは、200905211035131468のような文字列を提供します。文字列は、タイムスタンプの最上位ビットからSQLクエリの単純な文字列ソートの最下位ビットに移動するため、データベースに値を固定している場合は、日付順に並べることができます
次を使用して、秒単位の正確な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日以降はコードが使用されないようにしてください;)
使用することもできます
Stopwatch.GetTimestamp()。ToString();
数秒で必要な場合:
var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
実際のリアルタイムに対応するタイムスタンプが必要な場合、ただし特定のアプリケーションインスタンスに対して一意にすることも必要な場合は、次のコードを使用できます。
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;
}
}
}