Bagaimana saya bisa mengkonversi Unix timestamp untuk DateTime dan sebaliknya?
Ada contoh ini kode, tapi kemudian ia mulai berbicara tentang milidetik / nanodetik masalah.
Pertanyaan yang sama di MSDN, Detik sejak Unix epoch di C#.
Ini adalah apa yang saya've punya sejauh ini:
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);
}
}
707
18
Berikut ini's apa yang anda butuhkan:
Atau, untuk Jawa (yang berbeda karena timestamp dalam milidetik, bukan detik):
The versi terbaru .NET (v4.6) telah ditambahkan dukungan built-in untuk Unix waktu konversi. Yang termasuk ke dan dari Unix time yang diwakili oleh salah satu detik atau milidetik.
DateTimeOffset
:DateTimeOffset
untuk Unix waktu dalam detik:DateTimeOffset
:DateTimeOffset
untuk Unix waktu dalam milidetik:Catatan: metode Ini mengkonversi ke dan dari UTC
DateTimeOffset
. Untuk mendapatkanDateTime
representasi hanya menggunakanDateTimeOffset.UtcDateTime
atauDateTimeOffset.LocalDateTime
properties:DateTime untuk UNIX timestamp:
Dari Wikipedia:
Jadi, ini adalah kode saya:
Hati-hati, jika anda membutuhkan presisi yang lebih tinggi dari milidetik!
.NET (v4.6) metode (misalnya FromUnixTimeMilliseconds) don't memberikan presisi ini.
AddSeconds dan AddMilliseconds juga memotong mikrodetik di ganda.
Versi ini memiliki presisi tinggi:
Unix -> DateTime
DateTime -> Unix
Lihat IdentityModel.EpochTimeExtensions
Untuk melengkapi ScottCher's jawaban, baru-baru ini saya menemukan diri saya dalam mengganggu skenario memiliki investasi detik dan milidetik cap waktu UNIX sewenang-wenang dicampur bersama-sama dalam sebuah set data input. Kode berikut tampaknya untuk menangani hal ini dengan baik:
Unix time konversi ini baru di .NET Framework 4.6.
Anda sekarang dapat dengan mudah mengkonversi nilai tanggal dan waktu ke atau dari .NET Framework jenis dan Unix waktu. Hal ini dapat diperlukan, misalnya, ketika mengkonversi nilai-nilai waktu antara JavaScript dan klien .NET server. Berikut ini Api telah ditambahkan ke DateTimeOffset struktur:
Saya menemukan jawaban yang tepat hanya dengan membandingkan konversi ke 1/1/1970 w/o waktu setempat penyesuaian;
// 1510396991
// [11.11.2017 10:43:11 +00:00]
Tentu saja, seseorang dapat membuat
unixEpoch
global statis, sehingga hanya perlu muncul sekali dalam proyek anda, dan satu dapat menggunakanAddSeconds
jika UNIX waktu dalam detik.Untuk pergi dengan cara lain:
Truncate untuk Int64 dan/atau menggunakan
TotalSeconds
yang diperlukan.Unix tick adalah 1 detik (jika saya ingat dengan baik), dan .NET tick adalah 100 nanodetik.
Jika anda've telah menghadapi masalah dengan nanodetik, anda mungkin ingin mencoba menggunakan AddTick(10000000 * nilai).
Dari .net 4.6, anda dapat melakukan ini:
Aku yang dibutuhkan untuk mengkonversi struct timeval (detik, mikrodetik) yang mengandung
UNIX time
untukDateTime
tanpa kehilangan presisi dan modern't menemukan jawabannya di sini jadi saya pikir saya hanya bisa menambahkan saya:Menulis sederhana ekstensi yang bekerja untuk kita. Jika ada yang terlihat untuk itu...
anda dapat menghubungi UnixTime.UnixTimeToDateTime(double datetime))
Untuk .NET 4.6 dan kemudian: