質問

私は思っていた、日時からC#でタイムスタンプを作成する方法はありますか? 私はまた、Compact Frameworkの(DateTime.ToBinary以来の()は、CF内に存在しないことを言って)で動作するミリ秒の精度の値を必要とします。

私の問題は、私は後でそれをSORTBYと別などから大きいどの値を知ることができるようにデータベースに依存しない方法で、この値を格納したいということです。

役に立ちましたか?

解決

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

public static String GetTimestamp(this DateTime value)
{
    return value.ToString("yyyyMMddHHmmssfff");
}
文字列は最低にタイムスタンプの最上位ビットから行くように

このは、データベース内の値を貼り付けている場合は、あなたのSQLクエリでソート順単純な文字列が日付順に使用することができ、あなたが200905211035131468のような文字列を与えます

他のヒント

私は、次の

あなたが使用して、第2に、正確な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プロパティを、使用することができます。ちょうどあなたのコードは後に使用されていないことを確認してください12月31日9999;)

また、使用することができます。

Stopwatch.GetTimestamp()のToString();

あなたは、実際の本当の時間に対応するだけでなく、彼らは(特定のアプリケーションインスタンスのための)ユニークになりたいのタイムスタンプをしたい場合は、次のコードを使用することができます:

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;
       }
   }
}

uは秒単位で必要なときます:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top