powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Количество дней с начала "эпохи": странный глюк
5 сообщений из 5, страница 1 из 1
Количество дней с начала "эпохи": странный глюк
    #37855227
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно считать количество дней, которое соответствует той или иной дате. Написал класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public class TimeTools {

    private final static long SECONDS_IN_DAY = 3600*24;
    private final static String DATE_FORMAT = "dd.MM.yyyy";

    public static long dateToDayNumber(Date date) {
        DateFormat df = new SimpleDateFormat(DATE_FORMAT);
        long msLocal = 0;
        try {
            msLocal = date.getTime() - df.parse("01.01.1970").getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return msLocal / (1000*SECONDS_IN_DAY);
    }

    public static Date dayNumberToDate(long day) {
        DateFormat df = new SimpleDateFormat(DATE_FORMAT);
        long msLocal = day*1000*SECONDS_IN_DAY;
        long msZero = 0;
        try {
            msZero = df.parse("01.01.1970").getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new Date(msLocal + msZero);
    }

    public static void main(String[] args) {
        Date someDate = DateString.convert("02.01.2012 00:00", "dd.MM.yyyy HH:mm");
        long dayNumber = dateToDayNumber(someDate);
        System.out.println("day's number: " + dayNumber);
        System.out.println("date is: " + dayNumberToDate(dayNumber));
    }

}



В main проверяю как оно конверит туда и обратно. Если задавать someDate с 1970 по 2011 год, то конвертация проходит верно: какую дату задали, такую и получили. А вот если задать дату 2012 года (например, "02.01.2012"), то трындец:

Код: java
1.
2.
day's number: 15340
date is: Sun Jan 01 01:00:00 MSK 2012



В надежде, что глюк связан с отменой перевода часов на зимнее время, пробовал ставить JDK 1.6.0_33 - не помогло.
Что я делаю не так?
...
Рейтинг: 0 / 0
Количество дней с начала "эпохи": странный глюк
    #37855234
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запись DateString.convert эквивалентна следующей:

Код: java
1.
2.
3.
4.
5.
6.
7.
        DateFormat df = new SimpleDateFormat(DATE_FORMAT);
        Date someDate = null;
        try {
            someDate = df.parse("02.01.2012");
        } catch (ParseException e) {
            e.printStackTrace();
        }
...
Рейтинг: 0 / 0
Количество дней с начала "эпохи": странный глюк
    #37855243
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Количество дней с начала "эпохи": странный глюк
    #37855246
RomikT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skywriter,
"Делаю не так" начинается с этой строчки:
Код: java
1.
SECONDS_IN_DAY = 3600*24


Соответственно всё дальнейшее не имеет смысла и вполне закономерно не работает. Сначала вы теряете час из-за отмены перевода времени, потом округляете вниз и теряете день, а потом находите потерянный час, но уже поздно. Возьмите JodaTime.
...
Рейтинг: 0 / 0
Количество дней с начала "эпохи": странный глюк
    #37855636
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме этого, эпоха как раз начинается с 01.01.1970, поэтому df.parse("01.01.1970").getTime() бессмысленно, так как должно быть равно нулю. "Должно", потому что не факт, что ты не парсишь текущее время, но 1 января 1970 года. Причем, делаешь это дважды ... непонятно.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Количество дней с начала "эпохи": странный глюк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]