gpt4 book ai didi

java - 小于或等于 GregorianCalendar

转载 作者:行者123 更新时间:2023-11-30 04:02:41 24 4
gpt4 key购买 nike

我的程序中有这段代码:

if (expire.after(start) && expire.before(end))
//do somethig

但是这段代码不包含绑定(bind)日期。我的意思是,例如,如果开始时间是 2014/01/15,结束时间是 2014/01/20,过期时间是 2014/01/20,则不考虑过期时间。怎么解决?

我尝试过这样的方式:

if (expire.after(start) && (expire.equals(end) || expire.before(end)))

但是它不起作用,我得到了相同的结果。

最佳答案

正如@assylias所说,你可以尝试!expire.after(end),尽管这可能还不够。如果您使用 expire.equals(end) 那么您必须记住,这不仅仅是时间比较!在这里您还可以比较时区信息,甚至区域设置等。一般来说,仅使用 GregorianCalendar 进行日期比较并不好,因为这种类型也知道毫秒作为时间部分。因此,您可能要么手动将所有三个日历实例的整个时间部分设置为零(午夜,忽略时区异常,例如在巴西的某些日子),或者更好,您应该提取日期信息并通过以下方式比较这些详细信息使用以下工具:

public class DateComparator implements Comparator<GregorianCalendar> {
public int compare(GregorianCalendar gcal1, GregorianCalendar gcal2) {
int y1 = gcal1.get(Calendar.YEAR);
int y2 = gcal2.get(Calendar.YEAR);
if (y1 != y2) {
return y1 - y2;
}

int m1 = gcal1.get(Calendar.MONTH);
int m2 = gcal2.get(Calendar.MONTH);
if (m1 != m2) {
return m1 - m2;
}
return gcal1.get(Calendar.DATE) - gcal2.get(Calendar.DATE);
}
}

但请确保在比较日期部分时始终具有相同的时区。否则,您可以尝试 JodaTime,它提供类型 LocalDate 。新的 Java 8 中也包含类似的仅日期类型。

关于java - 小于或等于 GregorianCalendar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21580841/

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