有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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;
    }
}

共 (2) 个答案

  1. # 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变成^{}对象。aInstant是UTC时间线上分辨率为nanosecond的时刻

    Instant a = Instant.parse( "2015-05-03T17:11:00Z" );
    Instant b = Instant.parse( "2015-05-08T22:02:20Z" );
    

    与通常的compareTo方法相比

    int comparison = a.compareTo( b );
    

    您还可以与^{}^{}^{}方法进行比较

    提示:ISO 8601字符串的小数点可以是点(句点)或逗号。爪哇。时间类默认支持点,因此您可能希望用点替换任何逗号

    Instant a = Instant.parse( "2015-05-03T17:11:00,123456789Z".replace( "," , "." ) );
    

    乔达时间

    DateTime dateTime_1 = new DateTime( "2015-05-03T17:11:00Z" , DateTimeZone.UTC ) ;
    …
    Boolean isEarlier = dateTime_.isBefore( dateTime_2 ) ;
    
  2. # 2 楼答案

    考虑到测试日期,传递给SimpleDateFormat构造函数的String格式似乎混淆了小写和大写m。从the docs开始,大写M表示年中的月字符,而小写m表示小时分钟。此外,您可能希望使用小写s来表示,而不是大写S,后者表示分数秒字符

    看起来你想要的格式是"yyyy-MM-dd'T'HH:mm:ssZ"