2017-07-06 100 views
-3

我试图比较两个不同的时间来看看哪个来到另一个之前,但我遇到了一个else if语句来比较它们的后缀(am和pm),并输出第一次相对的顺序到另一次。如何使用if else语句比较两个不同的时间?

编辑:日期类型suffix1和suffix2的是字符串,TIME1和TIME2的数据类型是INT

到目前为止,我有这一段代码来检查,如果该周期是相等的:

if (suffix1.equals(suffix2)) 
    { 
     if (time1 > time2) 
     { 
      System.out.print("After"); 
     } 
     ..... 
    } 

有没有办法看到哪个时间的后缀出现在另一个之前?

+1

什么数据类型是time1和time2? –

+1

什么类型是time1和time2? –

+4

为什么不只是将整个字符串解析为Date或Instant,并直接比较它们? –

回答

0

使用日期来表示时间的应用:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

字符串表示,显示的时间时,应只使用。 当你使用日期,你可以比较他们这样的myDate.compareTo(anotherDate)

可以打印在任何一个形成所需的日期,这里是如何:Change date format in a Java string

+2

这是1998年的正确答案,现在比'Date'类有更好的表示时间的方法。 –

+1

'Date'类已经过时了。 'Date'和'Calendar'现在都是遗留的,被java.time类取代。避免这些遗留课程,因为它们令人困惑,设计不佳,并且存在缺陷。他们已被替换的原因,实际上*很多*很好的理由。 –

1

我会觉得你像下面这样以后是:

String timeString1 = "2:00 PM"; 
    String timeString2 = "9:00 AM"; 

    DateTimeFormatter timeFormatParser 
      = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH); 
    LocalTime time1 = LocalTime.parse(timeString1, timeFormatParser); 
    LocalTime time2 = LocalTime.parse(timeString2, timeFormatParser); 
    if (time1.isAfter(time2)) { 
     System.out.println("After"); 
    } 

在我的例子中,字符串代码确实打印After。如果您的原始时间字符串具有不同的格式,我希望您可以相应地修改格式模式字符串,否则请在评论中跟进。或者,也许更好,编辑你的问题来精确地指定你的字符串。您可以使用的字母是documented here。请注意格式模式区分大小写。

我的DateTimeFormatter预计大写AMPM。如果你的字符串大小写有他们,有几个选项:

  1. 简单:timeString1 = timeString1.toUpperCase(Locale.ENGLISH);,类似的还有timeString2
  2. 更一般但也更复杂:使用DateTimeFormatterBuilder构建不区分大小写的DateTimeFormatter

PS,我在2014年用出来的现代Java的日期和时间API之前,人们会经常使用一种叫做SimpleDateFormat解析成Date对象类。现在远离那个。较新的类已经显示出更好的工作和更多的程序员友好。