Преобразование классов java.time из Java 8 в Java 5

Что мне делать, чтобы использовать эти строки кода с Java 5, так как этот код работает с Java 6 и 7 с использованием threetenbp и работает непосредственно на Java 8:

// start date (set the time to start of day)
ZonedDateTime from = LocalDate.parse("2017-07-05").atStartOfDay(ZoneOffset.UTC);
// end date (set the time to 11 PM)
ZonedDateTime to = LocalDate.parse("2017-07-08").atTime(23, 0).atZone(ZoneOffset.UTC);

// get start and end timestamps
long start = from.toInstant().truncatedTo(ChronoUnit.MINUTES).toEpochMilli() / 1000;
long end = to.toInstant().truncatedTo(ChronoUnit.MINUTES).toEpochMilli() / 1000;

1 ответ

Решение

ThreeTen Backport, кажется, работает только в Java 6 и 7. Я протестировал с JDK 5, и он выдает UnsupportedClassVersionError,

В Java 5 одной из альтернатив является старая SimpleDateFormat а также Calendar классы:

// set the formatter to UTC
TimeZone utc = TimeZone.getTimeZone("UTC");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setTimeZone(utc);

// parse and set the time to midnight
Calendar cFrom = Calendar.getInstance(utc);
cFrom.setTime(sdf.parse("2017-07-05"));
cFrom.set(Calendar.HOUR_OF_DAY, 0);
cFrom.set(Calendar.MINUTE, 0);
cFrom.set(Calendar.SECOND, 0);
cFrom.set(Calendar.MILLISECOND, 0);

// parse and set the time to 23:00
Calendar cTo = Calendar.getInstance(utc);
cTo.setTime(sdf.parse("2017-07-08"));
cTo.set(Calendar.HOUR_OF_DAY, 23);
cTo.set(Calendar.MINUTE, 0);
cTo.set(Calendar.SECOND, 0);
cTo.set(Calendar.MILLISECOND, 0);

// get the epoch second (get millis and divide by 1000)
long start = cFrom.getTimeInMillis() / 1000;
long end = cTo.getTimeInMillis() / 1000;

Другой альтернативой является использование Joda-Time, API которого очень похож на java.time:

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

DateTime from = LocalDate.parse("2017-07-05").toDateTimeAtStartOfDay(DateTimeZone.UTC);
DateTime to = LocalDate.parse("2017-07-08").toDateTime(new LocalTime(23, 0), DateTimeZone.UTC);

long start = from.getMillis() / 1000;
long end = to.getMillis() / 1000;

Это даст те же значения для start а также end,


Просто примечание: Joda-Time находится в режиме сопровождения и заменяется новыми API, поэтому я не рекомендую начинать новый проект с него (если, конечно, вы не можете использовать новые API).
Даже на веб-сайте joda говорится: "Обратите внимание, что Joda-Time считается в значительной степени" законченным "проектом. Никаких серьезных улучшений не планируется. Если вы используете Java SE 8, пожалуйста, перейдите на java.time (JSR-310)".,

Другие вопросы по тегам