Saya mencoba untuk mengubah variabel C # DateTime ke waktu Unix, yaitu, jumlah detik sejak 1 Jan 1970. Sepertinya DateTime sebenarnya diimplementasikan sebagai jumlah 'ticks' sejak Jan 1st, 0001.
Pemikiran saya saat ini adalah mengurangi 1 Jan 1970 dari DateTime saya seperti ini:
TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0));
return span.TotalSeconds;
Apakah ada cara yang lebih baik?
Jawaban:
Itu pada dasarnya. Ini adalah metode yang saya gunakan untuk mengonversi ke dan dari waktu waktu Unix:
Pembaruan: Pada .Net Core 2.1 dan .Net Standard 2.1, DateTime yang sama dengan Unix Epoch dapat diperoleh dari statis
DateTime.UnixEpoch
.sumber
t specify this explicitly and somewhere later in code you
memiliki ToUniversalTime () maka Anda akan mendapatkan waktu Utc yang buruk, karena secara default DateTime BUKAN Utc.Jika sisa sistem Anda OK dengan DateTimeOffset daripada DateTime, ada fitur yang sangat nyaman:
sumber
var time = DateTimeOffset.FromUnixTimeSeconds(5000);
MS DocSatu-satunya hal yang saya lihat adalah bahwa ini seharusnya dilakukan sejak Midnight Jan 1, 1970 UTC
sumber
Anda mungkin ingin menggunakan DateTime.UtcNow untuk menghindari masalah zona waktu
sumber
Pendekatan tersebut akan baik jika tanggal-waktu yang dipermasalahkan adalah dalam UTC, atau mewakili waktu lokal di area yang tidak pernah menggunakan waktu musim panas. Rutinitas perbedaan DateTime tidak memperhitungkan Daylight Saving Time, dan akibatnya akan menganggap tengah malam 1 Juni sebagai kelipatan dari 24 jam setelah tengah malam 1 Januari. Saya tidak mengetahui apa pun di Windows yang melaporkan aturan penghematan siang hari historis untuk saat ini lokal, jadi menurut saya tidak ada cara yang baik untuk menangani waktu dengan benar sebelum perubahan aturan pergeseran waktu siang hari terbaru.
sumber
Anda dapat membuat startTime dan endTime dari DateTime, lalu melakukan endTime.Subtract (startTime). Kemudian keluarkan span Anda.
Saya pikir itu seharusnya berhasil.
sumber
Saya menggunakan tahun 2000 daripada Epoch Time dalam kalkulus saya. Bekerja dengan nomor yang lebih kecil mudah disimpan dan diangkut dan ramah JSON.
Detik dari tahun 2000 :
Detik dari Waktu Unix:
Misalnya tahun 2020 adalah:
var year2020 = (new DateTime ()). AddYears (2019) .Ticks; // Karena DateTime sudah dimulai pada tahun ke-1
637134336000000000 Kutu sejak 1-st Jan 0001
63713433600 Detik sejak 1-st Jan 0001
1577836800 Detik sejak Epoch Time
631152000 Detik sejak tahun 2000
Referensi:
Konverter Waktu Epoch: https://www.epochconverter.com
Konverter tahun 1: https://www.epochconverter.com/seconds-days-since-y0
sumber