Saya telah melihat-lihat stackoverflow, dan bahkan melihat beberapa pertanyaan yang disarankan dan sepertinya tidak ada yang menjawab, bagaimana Anda mendapatkan cap waktu unix di C #?
c#
timestamp
unix-timestamp
bizzehdee
sumber
sumber
Jawaban:
Anda mendapatkan cap waktu unix dalam C # dengan menggunakan
DateTime.UtcNow
dan mengurangi waktu zaman 1970-01-01.misalnya
DateTime.UtcNow
dapat diganti denganDateTime
objek apa pun yang Anda inginkan untuk mendapatkan cap waktu unix.Ada juga bidang,
DateTime.UnixEpoch
yang sangat buruk didokumentasikan oleh MSFT, tetapi dapat menjadi penggantinew DateTime(1970, 1, 1)
sumber
DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Ticks / TimeSpan.TicksPerSecond;
Pada. NET 4.6, ada
DateTimeOffset.ToUnixTimeSeconds()
.Ini adalah metode instan, jadi Anda diharapkan menyebutnya sebagai instance dari
DateTimeOffset
. Anda juga dapat melakukan apapunDateTime
, meskipun waspadai zona waktu .Untuk mendapatkan cap waktu saat ini:
Untuk mendapatkan cap waktu dari
DateTime
:sumber
Int64
- pada saat bergulir, kita tidak akan menggunakan Bumi lagi karena kekurangan Bumi.DateTimeOffset.Now.ToUnixTimeSeconds()
Anda juga dapat menggunakan Kutu. Saya sedang mengkode untuk Windows Mobile jadi tidak memiliki set lengkap metode. TotalSeconds tidak tersedia untuk saya.
atau
sumber
new DateTime(1970, 1, 1)
menciptakan waktu denganKind
properti yang tidak ditentukan . Apa yang Anda benar-benar inginnew DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
menjadi benarInilah yang saya gunakan:
Perlu diingat bahwa metode ini akan mengembalikan waktu sebagai Waktu Univeral Terkoordinasi (UTC).
sumber
double
tipe; casting terlalu lama akan menyebabkan hilangnya presisi.)Memotong
.TotalSeconds
penting karena didefinisikan sebagaithe value of the current System.TimeSpan structure expressed in whole fractional seconds.
Dan bagaimana dengan ekstensi
DateTime
? Yang kedua mungkin lebih membingungkan bahwa nilainya sampai ekstensi properti ada.sumber
Saat Anda mengurangi 1970 dari waktu saat ini, ketahuilah bahwa rentang waktu akan paling sering memiliki bidang bukan nol milidetik. Jika karena alasan tertentu Anda tertarik dengan milidetik, ingatlah ini.
Inilah yang saya lakukan untuk mengatasi masalah ini.
sumber
Inilah yang saya gunakan.
sumber
Saya telah menyatukan pendekatan yang paling elegan untuk metode utilitas ini:
sumber
Solusi ini membantu dalam situasi saya:
menggunakan kode pembantu:
sumber
Ada ToUnixTimeMilliseconds untuk DateTimeOffset di Sistem
Anda dapat menulis metode serupa untuk DateTime:
10000000L - mengonversi kutu ke detik
62135596800L - mengkonversi 01.01.01 ke 01.01.1978
Tidak ada masalah dengan Utc dan kebocoran
sumber
Di bawah ini adalah kelas ekstensi 2 arah yang mendukung:
Dalam kasus OP, penggunaannya adalah:
atau
Meskipun ada jawaban langsung, saya percaya menggunakan pendekatan generik lebih baik. Terutama karena kemungkinan besar proyek yang memerlukan konversi seperti ini, juga akan memerlukan ekstensi ini, jadi lebih baik menggunakan alat yang sama untuk semua.
sumber
Saya menggunakan ini setelah berjuang untuk sementara waktu, itu juga melayani zona waktu:
sumber
Kode sederhana yang saya gunakan:
Kode ini memberikan cap waktu unix, total milidetik dari 1970-01-01 hingga sekarang.
sumber