ThreeTen Backport似乎只在 Java 6 和 7 中工作。我已经用 JDK 5 进行了测试,它会抛出一个UnsupportedClassVersionError
.
在 Java 5 中,一种替代方法是 oldSimpleDateFormat
和Calendar
classes:
// 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)。” .