Дротик - две разные даты дают одинаковую разницу в днях - PullRequest
0 голосов
/ 06 августа 2020

Я работал над проектом флаттера и пытался фильтровать результаты по указанной c дате, когда заметил следующее поведение.

main() {
  String v = '2020-08-03';
  int ms0 = 1596249000000;
  int ms1 = 1596368040000; // 
  int ms2 = 1596465736799;
  int ms3 = 1596472120778; //
  int ms4 = 1596623965588;
  
  print(DateTime.fromMillisecondsSinceEpoch(ms0));
  print(DateTime.fromMillisecondsSinceEpoch(ms1));
  print(DateTime.fromMillisecondsSinceEpoch(ms2));
  print(DateTime.fromMillisecondsSinceEpoch(ms3));
  print(DateTime.fromMillisecondsSinceEpoch(ms4));

 print(DateTime.parse(v).difference(DateTime.fromMillisecondsSinceEpoch(ms0)).inDays); 
 print(DateTime.parse(v).difference(DateTime.fromMillisecondsSinceEpoch(ms1)).inDays);
 print(DateTime.parse(v).difference(DateTime.fromMillisecondsSinceEpoch(ms2)).inDays);
 print(DateTime.parse(v).difference(DateTime.fromMillisecondsSinceEpoch(ms3)).inDays);
 print(DateTime.parse(v).difference(DateTime.fromMillisecondsSinceEpoch(ms4)).inDays);
}

Код выше дает следующие результаты

2020-08-01 10:30:00.000
2020-08-02 19:34:00.000
2020-08-03 22:42:16.799
2020-08-04 00:28:40.778
2020-08-05 18:39:25.588
1
0
0
-1
-2

Я не понимаю, как переменные ms1 и ms2 будут давать одинаковую разницу inDays. Не мог бы кто-нибудь помочь дать несколько указателей? Всем спасибо.

1 Ответ

3 голосов
/ 06 августа 2020

Продолжительность дня - 24 часа, полный час - 60 минут

Если разница меньше 24 часов на 1 секунду или 1 микросекунду, et c - полный день не засчитывается

Возвращаясь к вашему примеру

2020-08-03 среднее начало дня 00:00:00.000

и отличается от

2020-08-02 19:34:00.000 только на 4 часа, 26 минут

2020-08-03 22:42:16.799 только для 22ч, 42м, 16с, 799мс

Этот тест объясняет

  test('datetime difference in days', () {
    final date = DateTime.parse('2020-08-03');
    final date1 = DateTime.fromMillisecondsSinceEpoch(1596368040000);
    final date2 = DateTime.fromMillisecondsSinceEpoch(1596465736799);

    print(date);  // 2020-08-03 00:00:00.000
    print(date1); // 2020-08-02 17:34:00.000
    print(date2); // 2020-08-03 20:42:16.799

    expect(date1.difference(date).inDays, equals(0));
    expect(date1.difference(date).inHours, equals(-6));

    expect(date2.difference(date).inDays, equals(0));
    expect(date2.difference(date).inHours, equals(20));
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...