【问题标题】:Java date class comparing two Strings of datesJava日期类比较两个日期字符串
【发布时间】:2016-06-05 15:24:34
【问题描述】:

日期类有以下问题。我想将日期类的 toString() 方法附带的字符串与用户提供的日期和时间字符串进行比较。比较两个字符串时,即使我复制/粘贴日期和时间,equals() 也总是返回 false!有什么方法可以成功地将日期和时间字符串与 Date 类进行比较?非常感谢!!

import java.util.Date;
import java.util.Scanner;
public class SystemTest {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);


        String timeNow = new String((new Date()).toString());
        System.out.println(timeNow);
        System.out.println("Give date and time: ");
        String time = new String(input.next());

        if(time.equals(timeNow)){
            System.out.println("same");
        }else{
            System.out.println("Not same..");
        }
    }

}

已编辑

我必须使用日期类以正确的方式比较日期!

【问题讨论】:

    标签: java string date time string-comparison


    【解决方案1】:

    由于还没有人解释为什么你不应该将日期作为字符串进行比较,我会这样做。 “日期”是一个代表时间瞬间的抽象概念,Java Date(或最近java.time.* 中的类)是实现该抽象概念的类。字符串(即来自toString)只是表达时间瞬间抽象概念的一种方式,并且如您所知,不同的地方有不同的方式来表达日期/时间。

    如果您想比较抽象的“时间瞬间”,那么您应该将用户的输入解析为代表该瞬间的类并比较瞬间。这允许您验证用户的输入是否代表一个有效的瞬间,而不是仅仅因为用户犯了一个简单的错字而返回错误的结果。

    然后是时区的全部问题,但这是一个超出此处范围的巨大主题。日期操作是一个非常深刻和复杂的话题,而且很难做到正确。

    【讨论】:

    • 您可以提供一个逻辑,只要 String 实际上包含一个有效日期,它就会将任何字符串解析为 Date。这是有关此主题的文章的链接:linkedin.com/pulse/…
    • 我明白你说的。但是有没有其他方法可以将用户的日、月、年与日期进行比较? timeNow.getYear() 或 getMonth() 似乎不起作用。
    • “似乎不起作用” 信息不足以帮助您。用户输入的日期是什么样的?请edit您的问题显示相关信息。
    【解决方案2】:

    您应该在 Date 类中使用 compareTo 方法。

    timeNow.compareTo(time);
    

    【讨论】:

      【解决方案3】:

      您需要比较日期而不是字符串。您需要将用户提供给您的字符串解析为日期,然后将其与另一个日期进行比较。类 Date 具有方法 before(Date)after(Date)compareTo(Date) 请参阅类 Date 的 Javadoc API:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

      【讨论】:

        猜你喜欢
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        • 2013-06-24
        • 2014-04-21
        • 1970-01-01
        • 2014-11-15
        • 2011-09-14
        相关资源
        最近更新 更多