Bu örnek kod var, ancak daha sonra milisaniye / nanosaniye sorunlarından bahsetmeye başlıyor.
Aynı soru MSDN'de, C#'ta Unix çağından bu yana geçen saniye.
Şimdilik elimde bu var:
public Double CreatedEpoch
{
get
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
}
set
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
}
}
İşte ihtiyacınız olan şey:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
}
Ya da Java için (zaman damgası saniye değil milisaniye cinsinden olduğu için farklıdır):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
{
// Java timestamp is milliseconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dtDateTime;
}
Doğru cevabı, yerel saat ayarlaması olmadan 1/1/1970'e dönüşümü karşılaştırarak buldum;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
Bir Unix kenesi 1 saniyedir (eğer iyi hatırlıyorsam) ve bir .NET kenesi 100 nanosaniyedir.
Eğer nanosaniye ile ilgili sorunlarla karşılaşıyorsanız, AddTick(10000000 * value) kullanmayı deneyebilirsiniz.