我的要求是将给定时区中特定格式的给定日期与同一时区中的当前日期进行比较。另外,在比较时,我必须忽略时区。并且比较结果应为:0或1或-1
我尝试过的一种方法是
public void compareDate(){
TimeZone.setDefault(TimeZone.getTimeZone("America/New_York"));
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
Date todayDate = dateFormatter.parse(dateFormatter.format(new Date()));
Date date = dateFormatter.parse("2021-02-28");
System.out.println(todayDate.compareTo(date));
}
但是以上对我来说似乎效率很低。
另一种方法可能是同时获得两个日期,然后进行比较?
public static Date getDateWithoutTimeUsingCalendar() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
有人可以建议一个更好的选择吗?
只有一件事,时区和没有时间的比较必须存在。
该java.util
日期时间API及API格式,SimpleDateFormat
都已经过时,而且容易出错。建议完全停止使用它们,并切换到最新的日期时间API。*
使用java.time API(现代日期时间API)的演示:
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Tests
try {
System.out.println(compareWith("2021-02-28", "yyyy-MM-dd", "Asia/Calcutta"));
System.out.println(compareWith("2021/03/03", "yyyy/MM/dd", "Asia/Calcutta"));
} catch (DateTimeException e) {
System.out.println("Date string parsing error occured.");
}
}
static int compareWith(String strDate, String format, String timezone) throws DateTimeException {
ZoneId zoneId = ZoneId.of(timezone);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format, Locale.ENGLISH);
ZonedDateTime today = ZonedDateTime.now(zoneId).with(LocalTime.MIDNIGHT);
ZonedDateTime date = LocalDate.parse(strDate, dtf).atStartOfDay(zoneId);
return today.compareTo(date);
}
}
输出:
1
-1
从Trail:Date Time了解更多有关现代日期时间API的信息。
*出于任何原因,如果您必须坚持使用Java 6或Java 7,则可以使用ThreeTen-Backport将Three.java的大部分功能向Java 6和7进行反向移植。级别仍不与Java-8兼容,请检查可通过desugaring获得的Java 8+ API,以及如何在Android Project中使用ThreeTenABP。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句