Υπάρχει αυτό το παράδειγμα κώδικα, αλλά στη συνέχεια αρχίζει να μιλάει για προβλήματα χιλιοστών του δευτερολέπτου/νανοδευτερολέπτου.
Το ίδιο ερώτημα υπάρχει στο MSDN, Seconds since the Unix epoch in C#.
Αυτό είναι αυτό που έχω μέχρι στιγμής:
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);
}
}
Ακολουθεί τι χρειάζεστε:
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;
}
Ή, για τη Java (η οποία είναι διαφορετική επειδή η χρονοσφραγίδα είναι σε χιλιοστά του δευτερολέπτου, όχι σε δευτερόλεπτα):
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;
}
Βρήκα τη σωστή απάντηση απλά συγκρίνοντας τη μετατροπή στην 1/1/1970 χωρίς την προσαρμογή της τοπικής ώρας,
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;
Ένα tick του Unix είναι 1 δευτερόλεπτο (αν θυμάμαι καλά) και ένα tick του .NET είναι 100 νανοδευτερόλεπτα.
Εάν αντιμετωπίζετε προβλήματα με τα νανοδευτερόλεπτα, ίσως να θέλετε να δοκιμάσετε να χρησιμοποιήσετε το AddTick(10000000 * value).