Вопрос по date, timezone, java – Как преобразовать 2 даты одну в BST (текущая дата), а другую в GMT, чтобы можно было сравнить дату до и после методов?

2

Как преобразовать 2 даты, одну в BST (текущая дата), а другую в GMT, чтобы их можно было сравнить с использованием методов календарной даты before () и after ()? Я не знаю, относится ли BST к британскому летнему времени. Я бегу на ноутбуке с английскими настройками. Я не знаю, как лучше провести сравнение, чтобы увидеть, больше ли одно, чем другое, или равно. Я полагаю, что часовой пояс - это проблема для меня, успешно использующего методы date после () и before (). Я проверял равенство на основе 2 календарей.

Я хочу сравнить даты и использовал григорианские календари. У меня есть 3 даты григорианских календарей и я вычел 78 из первой даты, 48 из второй и 24 из 3-й даты из HOURS_OF_DAY для каждой. Эти даты в GMT. Затем я получаю свою текущую дату, и это в BST. Я хочу определить, когда моя текущая дата, т.е. дата бронирования, находится в пределах 3 дат, то есть 78 часов, 48 часов и 24 часов. Я надеюсь сделать это с Java.Util.Date

Любая помощь с благодарностью получена

@ daveb, но вы только что прокомментировали мой ответ, что хотите использовать класс Date. Я не понимаю. Carlo
Привет, Алекс, я хочу сравнить календари. У меня есть 3 даты григорианских календарей и я вычел 78 из первой даты, 48 из второй и 24 из 3-й даты из HOURS_OF_DAY для каждой. Эти даты в GMT. Затем я получаю свою текущую дату, и это в BST. Я хочу определить, когда моя текущая дата, т.е. дата бронирования, находится в пределах 3 дат, то есть 78 часов, 48 часов и 24 часов. Я надеюсь сделать это с Java.Util.Date daveb
Я не совсем понимаю вопрос здесь. Точно какой класс объектов вы пытаетесь сравнить? Если вы используетеjava.util.Date тогда они не чувствительны к часовым поясам, они определены в миллисекундах с 1970-01-01 00:00:00 по Гринвичу. Alex

Ваш Ответ

2   ответа
0

и найти ответ не было очевидно. Сейчас мы используем это решение в производстве, и оно отлично работает. Он основан наjodatime библиотека

public static Date convertDateTimeZone(Date date, TimeZone currentTimeZone, TimeZone newTimeZone) {
    return convertJodaTimezone(new LocalDateTime(date), DateTimeZone.forTimeZone(currentTimeZone), DateTimeZone.forTimeZone(newTimeZone));
}

public static Date convertDateTimeZone(Date date, TimeZone newTimeZone) {
    return convertDateTimeZone(date, null, newTimeZone);
}

public static Date convertJodaTimezone(LocalDateTime date, String srcTz, String destTz) {
    return convertJodaTimezone(date, DateTimeZone.forID(srcTz), DateTimeZone.forID(destTz));
}

public static Date convertJodaTimezone(LocalDateTime date, DateTimeZone srcTz, DateTimeZone destTz) {
    DateTime srcDateTime = date.toDateTime(srcTz);
    DateTime dstDateTime = srcDateTime.withZone(destTz);
    return dstDateTime.toLocalDateTime().toDateTime().toDate();
}

Все, что вам нужно сделать, это использовать первый метод, чтобы преобразовать ваши даты в определенный общий часовой пояс и сделать сравнение.

Чтобы получить экземпляр часового пояса, все что вам нужно сделать, это:

TimeZone.getTimeZone("BST");
Привет Хауцерн и Алекс, спасибо за это. Я надеялся сделать с помощью класса java.util.Date. Мне было интересно, как я мог сделать это без использования йодатима daveb
+1 к использованию joda-time - с классом java.util.Date работать очень сложно.
Я потерял свое время, пытаясь реализовать это без времени. Похоже, не совсем очевидно. Если вы хотите использовать только библиотеки Java, вам придется жестко программировать такие вещи, как разница во времени между часовыми поясами, и это очень рискованно.
2

Calendar calBst = new GregorianCalander();
calBst.setDate(date1);
calBst.setTimezone(TimeZone.getTimeZone("BST");

Calendar calGmt = new GregorianCalander();
calGmt.setDate(date2);
calGmt.setTimezone(TimeZone.getTimeZone("GMT");
calBst.before(calGmt);
Привет, Карло, позволяет ли приведенное выше сравнение двух дат в одном часовом поясе при сравнении? daveb
Спасибо за это. Я хотел конвертировать BST в GMT, используя библиотеку дат Java daveb
Может быть, вы имеете в виду разные ТЗ. В соответствии сthis interesting discussion, это должно работать правильно.

Похожие вопросы