英文:
calendar.getTime().equals(cal1) return false though both calendars has same time
问题
以下是您要翻译的代码部分:
Calendar calendar = Calendar.getInstance();
Calendar cal1 = Calendar.getInstance();
if (calendar.getTime().equals(cal1.getTime())) {
System.out.println("Hi!");
}
Printing `calendar.getTime()` and `cal1.getTime()` returns
Mon Aug 10 16:00:10 IST 2020
Mon Aug 10 16:00:11 IST 2020
Following code works as expected printing `Hi!` it should be return true for equals check but it doesn't.
if (!calendar.getTime().after(cal1.getTime()) || !calendar.getTime().before(cal1.getTime())) {
System.out.println("Hi!");
}
Then why it is returning false for equals check?
英文:
Calendar calendar = Calendar.getInstance();
Calendar cal1 = Calendar.getInstance();
if (calendar.getTime().equals(cal1.getTime())) {
System.out.println("Hi!");
}
Printing calendar.getTime()
and cal1.getTime()
returns
Mon Aug 10 16:00:10 IST 2020
Mon Aug 10 16:00:11 IST 2020
Following code works as expected printing Hi!
it should be return true for equals check but it doesn't.
if (!calendar.getTime().after(cal1.getTime()) || !calendar.getTime().before(cal1.getTime())) {
System.out.println("Hi!");
}
Then why it is returning false for equals check?
答案1
得分: 2
Mon Aug 10 16:00:10 IST 2020
和 Mon Aug 10 16:00:11 IST 2020
在秒数上不同。
此外,我建议您不要使用过时且容易出错的 java.util
日期时间 API。而是使用 现代日期时间 API,如下所示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dateTimeStr1 = "Mon Aug 10 16:00:10 IST 2020";
String dateTimeStr2 = "Mon Aug 10 16:00:11 IST 2020";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z u", Locale.ENGLISH);
LocalDateTime date1 = LocalDateTime.parse(dateTimeStr1, formatter);
LocalDateTime date2 = LocalDateTime.parse(dateTimeStr2, formatter);
System.out.println(date1.equals(date2));
}
}
输出:
false
如何排除秒数进行比较:
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dateTimeStr1 = "Mon Aug 10 16:00:10 IST 2020";
String dateTimeStr2 = "Mon Aug 10 16:00:11 IST 2020";
// 定义格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z u", Locale.ENGLISH);
// 将日期时间字符串解析为 LocalDateTime
LocalDateTime date1 = LocalDateTime.parse(dateTimeStr1, formatter);
LocalDateTime date2 = LocalDateTime.parse(dateTimeStr2, formatter);
// 通过排除秒数从解析的日期时间创建 LocalDateTime 实例
LocalDateTime date1WithoutSec = LocalDateTime.of(date1.toLocalDate(),
LocalTime.of(date1.getHour(), date1.getMinute()));
LocalDateTime date2WithoutSec = LocalDateTime.of(date2.toLocalDate(),
LocalTime.of(date2.getHour(), date2.getMinute()));
System.out.println(date1WithoutSec.equals(date2WithoutSec));
}
}
输出:
true
英文:
Mon Aug 10 16:00:10 IST 2020
and Mon Aug 10 16:00:11 IST 2020
differ in seconds.
Also, I suggest you do not use the outdated and error-prone java.util
date-time API. Use the modern date time API instead as shown below:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dateTimeStr1 = "Mon Aug 10 16:00:10 IST 2020";
String dateTimeStr2 = "Mon Aug 10 16:00:11 IST 2020";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z u", Locale.ENGLISH);
LocalDateTime date1 = LocalDateTime.parse(dateTimeStr1, formatter);
LocalDateTime date2 = LocalDateTime.parse(dateTimeStr2, formatter);
System.out.println(date1.equals(date2));
}
}
Output:
false
How to compare them by excluding seconds:
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dateTimeStr1 = "Mon Aug 10 16:00:10 IST 2020";
String dateTimeStr2 = "Mon Aug 10 16:00:11 IST 2020";
// Define the formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z u", Locale.ENGLISH);
// Parse the date-time strings into LocalDateTime
LocalDateTime date1 = LocalDateTime.parse(dateTimeStr1, formatter);
LocalDateTime date2 = LocalDateTime.parse(dateTimeStr2, formatter);
// Create LocalDateTime instances from the parsed ones by excluding seconds
LocalDateTime date1WithoutSec = LocalDateTime.of(date1.toLocalDate(),
LocalTime.of(date1.getHour(), date1.getMinute()));
LocalDateTime date2WithoutSec = LocalDateTime.of(date2.toLocalDate(),
LocalTime.of(date2.getHour(), date2.getMinute()));
System.out.println(date1WithoutSec.equals(date2WithoutSec));
}
}
Output:
true
答案2
得分: 1
它们完全不相等,你可以看到。
Mon Aug 10 16:00:10 IST 2020
Mon Aug 10 16:00:11 IST 2020.
而且你的第二个if语句中有or
,所以它返回true
。
英文:
They are not equal at all and you can see.
Mon Aug 10 16:00:10 IST 2020
Mon Aug 10 16:00:11 IST 2020.
And your second if has or
in it so it returns true
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论