package com.javarush.task.task08.task0827;
import java.util.Date;
/*
Работа с датой
*/
public class Solution {
public static void main(String[] args) {
System.out.println(isDateOdd("JAN 1 2013"));
}
public static boolean isDateOdd(String date) {
Date flyDate = new Date(date);
flyDate.setHours(0);
flyDate.setMinutes(0);
flyDate.setSeconds(0);
Date startYearDate = new Date();
startYearDate.setYear(flyDate.getYear());
startYearDate.setMonth(0);
startYearDate.setDate(0);
startYearDate.setHours(0);
startYearDate.setMinutes(0);
startYearDate.setSeconds(0);
System.out.println(flyDate);
System.out.println(startYearDate);
System.out.println(flyDate.getTime());
System.out.println(startYearDate.getTime());
long timeInMsOfDay = 24*60*60*1000;
long time1 = flyDate.getTime()/timeInMsOfDay;
long time2 = startYearDate.getTime()/timeInMsOfDay;
long differenseDays = (flyDate.getTime() - startYearDate.getTime())/timeInMsOfDay;
System.out.println(time1-time2);
System.out.println(differenseDays);
return true;
}
}
Как видно, оба выражения выдают два разных результата, почему так?
И ,если можете, подскажите, что не так с датой JANUARY 2 1970? Почему с ней вся логика рушится?OldFreddy
19 уровень
Почему выдает разные значения при, казалось бы, одинаковых операциях с числами?
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
2 декабря 2019, 18:43полезный
Потому что ты не посмотрел документацию по классу Date и неправильно пользуешься методом setDate().
Тебе нужно setDate(1), а не setDate(0).
А еще ты мог бы узнать, что отсчет милисекунд для Date начинается как раз с 1 января 1970 года (по Гринвичу). А в нашем часовом поясе 1 января 1970 года 00 часов 00 минут дает отрицательное значение в милисекундах.
+1
OldFreddy
2 декабря 2019, 18:58
я специально поставил setDate(0), потому как с setDate(1) вываливается false на первые числа месяца
0
OldFreddy
2 декабря 2019, 19:04
прошел валидацию с таким кодом, JAN 1 1970 выдает false, но почему-то валидатор пропустил меня, ничерта не понял:(
upd: врубился, если установить setHours(4), то проблема часовых поясов решается и не выбрасывает отрицательных чисел, следовательно первое января 1970 года тоже теперь выдает true. Спасибо Вам огромное за вектор
0
OldFreddy
2 декабря 2019, 19:08
И еще, подскажите, пожалуйста, на данном этапе стоило решать эту задачу, используя календарь, или пока еще можно пользоваться классом Date, хоть он и не рекомендуется?
0
Ksenia Volkova Java Developer в DXC Master
2 декабря 2019, 19:14
Можно пользоваться чем угодно. Но в любом случае стоит получить представление о Calendar или LocalDate
0