Java中的安卓日期和时间比较
我正在比较两个日期和时间,但它没有按预期工作。请帮帮我
import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Date date1=convertStringToDate("2015-05-03T17:11:00Z");
Date date2=convertStringToDate("2015-05-08T22:02:20Z");
System.out.println("Date2:"+date1.compareTo(date2));//output 1
Date date3=convertStringToDate("2015-05-08T21:15:29Z");
System.out.println("Date3:"+date1.compareTo(date3));//output -1
Date date4=convertStringToDate("2015-05-08T19:22:25Z");
System.out.println("Date4:"+date1.compareTo(date4));//output -1
Date date5=convertStringToDate("2015-05-08T16:46:31Z");
System.out.println("Date5:"+date1.compareTo(date5));//output 1
Date date6=convertStringToDate("2015-05-08T15:48:02Z");
System.out.println("Date6:"+date1.compareTo(date6));//output 1
}
static Date convertStringToDate(String input){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd'T'HH:MM:SS'Z'");
Date date = null;
try {
date = formatter.parse(input);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
# 1 楼答案
交换
m
个字母注释是正确的,您需要通过交换大写和小写
m
字母来修复格式模式更妙的是,避免使用java语言可以让你省去很多痛苦。util。日期和日期。日历课程
ISO 8601
您的输入字符串是标准的ISO 8601格式
Joda Time和java。在解析和生成日期时间值的文本表示时,默认情况下,时间使用ISO 8601格式。因此,甚至不需要定义解析模式。只需在Joda Time中将这些字符串提供给
DateTime
的构造函数,或者在java中提供等效的构造函数。时间到了避免旧时的课程
您正在使用旧的日期时间类,这些类被证明设计得很糟糕,而且很麻烦。避开它们
而是使用java。时间,或者它过时的前身Joda-Time
爪哇。时间
java.time框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,比如
java.util.Date
、.Calendar
、&java.text.SimpleDateFormat
现在在maintenance mode中,Joda-Time项目还建议迁移到java。时间到了
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和解释
java的大部分内容。时间功能被向后移植到Java 6&;7 in ThreeTen-Backport并进一步适应Android in ThreeTenABP
{a10}项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间到了
解析为
Instant
Parse directly变成^{} 对象。a
Instant
是UTC时间线上分辨率为nanosecond的时刻与通常的
compareTo
方法相比您还可以与^{} 、^{} 和^{} 方法进行比较
提示:ISO 8601字符串的小数点可以是点(句点)或逗号。爪哇。时间类默认支持点,因此您可能希望用点替换任何逗号
乔达时间
# 2 楼答案
考虑到测试日期,传递给
SimpleDateFormat
构造函数的String
格式似乎混淆了小写和大写m
。从the docs开始,大写M
表示年中的月字符,而小写m
表示小时分钟。此外,您可能希望使用小写s
来表示秒,而不是大写S
,后者表示分数秒字符看起来你想要的格式是
"yyyy-MM-dd'T'HH:mm:ssZ"