Coba ini (di https://dartpad.dev/):

int day = 28;
DateTime day1 = DateTime(2020, 3, day);
DateTime day2 = DateTime(2020, 3, day - 1);
print(day1.difference(day2).inDays);

Hasilnya harus 1, mendapatkan 0 sebagai gantinya... Ganti variabel "hari" dengan nilai lain dan memberikan hasil yang benar (1)...

Apakah itu bug?

0
user6097845 28 Maret 2020, 15:42

1 menjawab

Jawaban Terbaik

Nah, masalahnya turun ke nilai pengembalian difference yaitu:

Perbedaannya diukur dalam detik dan fraksi detik. Selisih di atas menghitung jumlah detik pecahan antara tengah malam di awal tanggal tersebut. Jika tanggal di atas adalah waktu setempat, bukan UTC, maka perbedaan antara dua tengah malam tidak boleh kelipatan 24 jam karena perbedaan waktu musim panas.

https://api.dart.dev/stable/2.7.2/dart-core/DateTime/difference.html

Jadi nilai yang kita peroleh dari difference adalah Duration objek yang berisi selisih antara kedua objek DateTime dalam hitungan detik. Anda kemudian dapat meminta Duration untuk mewakili hasil ini dalam beberapa hari.

Masalahnya adalah banyak negara yang mengubah jam mereka karena waktu musim panas di bulan Maret. Faktanya, contoh Anda tidak menunjukkan bug apa pun di komputer saya karena saya di Denmark. Jadi saya mengubah kode Anda menjadi:

void main() {
  for (var day = 1; day <= 31; day++) {
    DateTime day1 = DateTime(2020, 3, day);
    DateTime day2 = DateTime(2020, 3, day - 1);
    print('Day $day: inDays: ${day1.difference(day2).inDays} inHours: ${day1.difference(day2).inHours}');
  }
}

Yang mengembalikan yang berikut di komputer saya:

Day 27: inDays: 1 inHours: 24
Day 28: inDays: 1 inHours: 24
Day 29: inDays: 1 inHours: 24
Day 30: inDays: 0 inHours: 23
Day 31: inDays: 1 inHours: 24

Karena kami benar-benar menghilangkan satu jam dari hari ketika kami mengubah ke waktu musim panas, durasi yang dikembalikan tidak berisi 24 jam tetapi 23.

1
julemand101 28 Maret 2020, 15:49