Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с разницей дат / 8 сообщений из 8, страница 1 из 1
24.08.2012, 14:54:34
    #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
25.08.2012, 00:35:30
    #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
29.08.2012, 13:28:18
    #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
29.08.2012, 13:43:38
    #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
29.08.2012, 14:14:08
    #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
29.08.2012, 14:24:29
    #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
29.08.2012, 14:51:22
    #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
01.09.2012, 04:01:37
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с разницей дат / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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