gpt4 book ai didi

java - 将给定日期与当前日期进行比较的最佳方法,在给定时区中没有时间部分

转载 作者:行者123 更新时间:2023-12-04 02:27:37 26 4
gpt4 key购买 nike

我的要求是将给定时区中特定格式的给定日期与同一时区中的当前日期进行比较。另外,在比较时我必须忽略时区。比较结果应该是:0 或 1 或 -1

我试过的一种方法是

  1. 设置所需的时区
  2. 使用“new Date()”获取当前日期,使用“yyyy-MM-dd”格式化它,然后再次解析它以获取日期对象
  3. 对提供的要比较的日期字符串使用相同的格式化程序
  4. 然后使用 compareTo 比较两个日期,得到所需的结果
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 已过时且容易出错。建议完全停止使用它们并切换到 modern date-time 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它将大部分 java.time 功能反向移植到 Java 6 和 7。如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project .

关于java - 将给定日期与当前日期进行比较的最佳方法,在给定时区中没有时间部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66428866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com