powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с разницей дат
8 сообщений из 8, страница 1 из 1
Проблема с разницей дат
    #37929439
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
                     Date dateAlarm= alarm.getTimeAlarm();
                     
                     DateTime start = new DateTime(dateAlarm); // дата из базы 2012-07-27 18:20:00
                     
                     Date d = new Date(System.currentTimeMillis());  
                     
                     DateTime end = new DateTime(d); // текущая дата 

                  Period p = new Period(start, end);
                  
                        PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    .appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();
                  


В базе хранятся две даты: 2012-07-27 18:20:00 и 2012-08-24 14:02:00. Когда запускаю:
Код: java
1.
System.out.println(daysHoursMinutes.print(p));


Выводит:
Для первой даты:
Код: java
1.
6 days and 31 minutes and 40 seconds


И для второй даты:
Код: java
1.
-10 minutes and -19 seconds


По второй дате все верно, т.к. она наступит через 10 минут, а вот для первой не понятно откуда 6 дней берутся, ведь она июльская, а сейчас уже 24 августа, разница между ними почти месяц, а показывает 6 дней. Что не так подскажите пожалуйста. Спасибо
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37929998
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Нужно задать PeriodType и указать нужные поля:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
Interval i1 = new Interval(dt1, DateTime.now());
Interval i2 = new Interval(DateTime.now(), dt2);
...
PeriodType pt = PeriodType.forFields(new DurationFieldType[] {
    DurationFieldType.days(),
    DurationFieldType.minutes(),
    DurationFieldType.seconds()
});

System.out.println(fmt.print(i1.toPeriod(pt)));
System.out.println(fmt.print(i2.toPeriod(pt)));
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37935256
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanJulT,

Нужно задать PeriodType и указать нужные поля:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
Interval i1 = new Interval(dt1, DateTime.now());
Interval i2 = new Interval(DateTime.now(), dt2);
...
PeriodType pt = PeriodType.forFields(new DurationFieldType[] {
    DurationFieldType.days(),
    DurationFieldType.minutes(),
    DurationFieldType.seconds()
});

System.out.println(fmt.print(i1.toPeriod(pt)));
System.out.println(fmt.print(i2.toPeriod(pt)));


Ничего не получается, делаю так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
   DateTime end = new DateTime(dateAlarm); // дата из базы
                  
                        PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    .appendSuffix(" дней", " дн.")
    .appendSeparator(" : ")
    .appendHours()
    .appendSuffix(" часов", " ч.")
    .appendSeparator(" : ")
    .appendMinutes()
    .appendSuffix(" минут", " мин.")
    .toFormatter();
                  
 PeriodType pt = PeriodType.forFields(new DurationFieldType[] {
    DurationFieldType.days(),
    DurationFieldType.hours(),
    DurationFieldType.minutes()
});
                
Interval i2 = new Interval(DateTime.now(), end);
System.out.println("diff="+daysHoursMinutes.print(i2.toPeriod(pt)));


Получаю исключение:
Код: java
1.
java.lang.IllegalArgumentException: The end instant must be greater or equal to the start
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37935299
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTНичего не получается, делаю так:
Код: java
1.
2.
   DateTime end = new DateTime(dateAlarm); // дата из базы
   Interval i2 = new Interval(DateTime.now(), end);


Получаю исключение:
Код: java
1.
java.lang.IllegalArgumentException: The end instant must be greater or equal to the start

По-видимому DateTime.now() > dateAlarm . Нужно указать дату, которая наступит раньше dateAlarm. Или поменять местами :)
Код: java
1.
Interval i2 = new Interval(end, DateTime.now());
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37935363
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanJulTНичего не получается, делаю так:
Код: java
1.
2.
   DateTime end = new DateTime(dateAlarm); // дата из базы
   Interval i2 = new Interval(DateTime.now(), end);


Получаю исключение:
Код: java
1.
java.lang.IllegalArgumentException: The end instant must be greater or equal to the start

По-видимому DateTime.now() > dateAlarm . Нужно указать дату, которая наступит раньше dateAlarm. Или поменять местами :)
Код: java
1.
Interval i2 = new Interval(end, DateTime.now());


ну да, я согласна, но у меня в базе есть даты, которые будущие и прошедшие, т.е. в любом случае у меня вылетает исключение, мне что тогда автоматически ставит проверку на больше/меньше и в зависимости от этого ставить:
Код: java
1.
new Interval(end, DateTime.now());

или
Код: java
1.
new Interval(DateTime.now(),end);


?
если в базе все даты меньше текущей, тогда (end, DateTime.now()); красиво отрабатывает, а если будущие, тогда нет
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37935385
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,
авторставить проверку на больше/меньшеПроверку не надо ставить. Он же генерит исключение. Можно как-то так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
Interval interval;
try {
   interval = ...; // dateAlarm < now()
}
catch (IllegalArgumentException e) {
   interval = ...; // dateAlarm > now()
}
...

P.S.
Временный костыль... Чуть позже посмотрю, может есть "красивое" решение
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37935459
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanJulT,
авторставить проверку на больше/меньшеПроверку не надо ставить. Он же генерит исключение. Можно как-то так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
Interval interval;
try {
   interval = ...; // dateAlarm < now()
}
catch (IllegalArgumentException e) {
   interval = ...; // dateAlarm > now()
}
...

P.S.
Временный костыль... Чуть позже посмотрю, может есть "красивое" решение
спасибо :))
...
Рейтинг: 0 / 0
Проблема с разницей дат
    #37939628
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Я б сделал так
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
@SuppressWarnings("serial")
class MyInterval extends MutableInterval {
    public MyInterval() {
	this(DateTime.now(), DateTime.now());
    }
    
    public MyInterval(ReadableInstant instant) {
	this(DateTime.now(), instant);
    }
    
    public MyInterval(ReadableInstant startInstant, ReadableInstant endInstant) {
	super(startInstant, endInstant);
    }

    public MyInterval dateFormat(ReadableInstant date) {
	setEnd(date);
	return this;
    }

    protected void checkInterval(long start, long end) {
	if (end < start) {
	    long temp = end;
	    end = start;
	    start = temp;
	}
    }

    public String toString() {
	PeriodFormatter fmt = new PeriodFormatterBuilder().appendDays()
		.appendSuffix(" day", " days").appendSeparator(" ")
		.appendMinutes().appendSuffix(" minute", " minutes")
		.appendSeparator(" ").appendSeconds()
		.appendSuffix(" second", " seconds").appendSeparator(" ")
		.toFormatter();

	PeriodType pt = PeriodType.forFields(new DurationFieldType[] {
		DurationFieldType.days(), DurationFieldType.minutes(),
		DurationFieldType.seconds() });

	return fmt.print(this.toPeriod(pt));
    }
}

public static void usage() {
    DateTime dt1 = new DateTime(2012, 7, 27, 18, 20, 00, 0);
    DateTime dt2 = new DateTime(2012, 8, 30, 00, 59, 00, 0);
    DateTime dt3 = new DateTime(2012, 9, 10, 00, 00, 00, 0);

    MyInterval mi = new MyInterval();
    System.out.println(mi.dateFormat(dt1));
    System.out.println(mi.dateFormat(dt2));
    System.out.println(mi.dateFormat(dt3));
}

/*
Date1: 2012-07-27T18:20:00.000+06:00
Date2: 2012-08-30T00:59:00.000+06:00
Date3: 2012-09-10T00:00:00.000+06:00
Now(): 2012-09-01T05:52:51.778+06:00

-35 days -692 minutes -51 seconds
-2 days -293 minutes -51 seconds
8 days 1087 minutes 8 seconds
*/


...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с разницей дат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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