2009-11-04 13 views
17

C#でUNIX時間を簡単に/簡単に解析する方法はありますか?私はその言語ではまったく新しいので、これが痛いほど明白な質問であれば、私はお詫び申し上げます。私は[エポックからの秒]の形式の文字列を持っています。[ミリ秒]。 C#でJavaのSimpleDateFormatに相当するものはありますか?C#でunix時間を解析する

答えて

36

最も簡単な方法は、のようなものを使用することが考えられます:

private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 
                 DateTimeKind.Utc); 

... 
public static DateTime UnixTimeToDateTime(string text) 
{ 
    double seconds = double.Parse(text, CultureInfo.InvariantCulture); 
    return Epoch.AddSeconds(seconds); 
} 
注意すべき

3つのこと:

  • あなたの文字列ではなく、間違いなくフォーム「X.Y」のであれば上記のように「X、Y」あなたはことを確認するために、インバリアントカルチャを使用する必要があります「」小数点として解析されます
  • DateTimeコンストラクタでUTCを指定して、現地時刻ではないと確信させる必要があります。
  • .NET 3.5以降を使用している場合は、DateTimeの代わりにDateTimeOffsetを使用することをおすすめします。
1

MSDN DateTime docsの場合は、また、TimeSpanを参照してください。

// First make a System.DateTime equivalent to the UNIX Epoch. 
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
// Add the number of seconds in UNIX timestamp to be converted. 
dateTime = dateTime.AddSeconds(numSeconds); 
// Then add the number of milliseconds 
dateTime = dateTime.Add(TimeSpan.FromMilliseconds(numMilliseconds)); 
+2

あなたの投稿の編集版は問題ありません。しかし、リンクされたMSDNページにはUNIXタイムスタンプのサンプルがなく、DateTimeにはそのページで見つけられた組み込み関数もないため、最初のバージョンは本当に役に立たなかった。答えを編集したので、他のものとまったく同じです。 – OregonGhost

5
// This is an example of a UNIX timestamp for the date/time 11-04-2005 09:25. 
double timestamp = 1113211532; 

// First make a System.DateTime equivalent to the UNIX Epoch. 
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 

// Add the number of seconds in UNIX timestamp to be converted. 
dateTime = dateTime.AddSeconds(timestamp); 

// The dateTime now contains the right date/time so to format the string, 
// use the standard formatting methods of the DateTime object. 
string printDate = dateTime.ToShortDateString() +" "+ dateTime.ToShortTimeString(); 

// Print the date and time 
System.Console.WriteLine(printDate); 

Surce:http://www.codeproject.com/KB/cs/timestamp.aspx

3
var date = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)) 
       .AddSeconds(
       double.Parse(yourString, CultureInfo.InvariantCulture)); 
+3

これは、DateTimeKindが指定されていないことになります。また、小数点のフォーマットを決定するためにローカルカルチャを使用します。 –

+0

ああ、本当です。修正されます。ライブラリのために+1 –

1

これはa blog posting by Stefan Henkeからである:

private string conv_Timestamp2Date (int Timestamp) 
{ 
      // calculate from Unix epoch 
      System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
      // add seconds to timestamp 
      dateTime = dateTime.AddSeconds(Timestamp); 
      string Date = dateTime.ToShortDateString() +", "+ dateTime.ToShortTimeString(); 

      return Date; 
} 
5

これはC#の人にとって非常に一般的なことですが、そのためのライブラリはありません。

私はこのミニライブラリhttps://gist.github.com/1095252を作成して私の人生を(私もあなたも願っています)簡単にしています。

+0

+1、いいです。 –

0

ここでは、便利な拡張メソッド

public static DateTime UnixTime(this string timestamp) 
    { 
     var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
     return dateTime.AddSeconds(int.Parse(timestamp)); 
    } 
1

ようである私は、これはかなり古い質問です実現が、私はhas a method specifically for thisNodatime'sインスタントクラスを使用私の解決策を投稿したい考え出し。

Instant.FromSecondsSinceUnixEpoch(longSecondsSinceEpoch).ToDateTimeUtc(); 

私はたぶん一部の人々にとって重いかもしれません。依存関係の肥大化が大きな懸念事項ではない私のプロジェクトでは、自分自身を維持するのではなく、維持されているライブラリソリューションに頼っています。

関連する問題