如何在java中比较时间字符串与当前时间?

时间:2014-07-24 07:37:00

标签: java datetime comparison

我有一个时间字符串,如" 15:30"我想将该字符串与当前时间进行比较。 请提出一些简单的建议 以及如何以小时分钟格式获取当前时间(" HH:mm")

7 个答案:

答案 0 :(得分:8)

TL;博士

LocalTime.now()
         .isAfter( LocalTime.parse( "15:30" ) )

详细

您应该反思:如何将该字符串转换为时间值。您不会通过将数字转换为字符串来尝试数学。日期时间值也是如此。

避免使用旧的捆绑类java.util.Date和.Calendar,因为它们在设计和实现方面都非常麻烦,存在缺陷。它们被java.time package中的新Java 8取代。而java.time的灵感来自Joda-Time

java.timeJoda-Time都提供了一个类来捕获没有任何日期到时区的时间:LocalTime

java.time

使用Java内置的java.time类,特别是LocalTime。获取当地时区的当前时间。根据输入字符串构造一个时间。与isBeforeisAfterisEqual方法进行比较。

LocalTime now = LocalTime.now();
LocalTime limit = LocalTime.parse( "15:30" );
Boolean isLate = now.isAfter( limit );

最好指定所需/预期的时区,而不是隐式依赖JVM的当前默认时区。

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
LocalTime now = LocalTime.now( z );  // Explicitly specify the desired/expected time zone.
LocalTime limit = LocalTime.parse( "15:30" );
Boolean isLate = now.isAfter( limit );

约达时间

在这种情况下,使用Joda-Time库的代码几乎与上面针对java.time看到的代码相同。

请注意Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time类。


关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:6)

像这样正常比较字符串:

String currentTime = new SimpleDateFormat("HH:mm").format(new Date());
String timeToCompare = "15:30";
boolean x = currentTime.equals(timeToCompare);

如果时间相同,则x true如果不是x则为false

答案 2 :(得分:3)

以下会得到时间。你可以用它来比较

String currentTime=new SimpleDateFormat("HH:mm").format(new Date());

答案 3 :(得分:0)

试试这个

public static String compareTime(String d) {
        if (null == d)
            return "";

        try {

            SimpleDateFormat sdf= new SimpleDateFormat("HH:mm");
            d = sdf.format(new Date());
        } catch (Exception e) {
            e.printStackTrace();

        }

        return d;

    }

然后你可以与你的字符串进行比较

答案 4 :(得分:0)

以下是我在当前时间之前和之后进行比较的示例:

MainActivity.java

Button search = (Button) findViewById(R.id.searchBus);
        SimpleDateFormat sdfDate = new SimpleDateFormat("HH:mm");

        String limit = "23:00";
        Date limitBus=null;
        try {
            limitBus = sdfDate.parse(limit);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        String start = "07:15";
        Date startBus=null;
        try {
            startBus = sdfDate.parse(start);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        String user_time = getCurrentTimeStamp();
        Date now = null;
        try {
            now = sdfDate.parse(user_time);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        if (now.after(limitBus)||now.before(startBus)){
            Toast.makeText(this, "Bus Operation Hours : 7:15AM - 11.00PM", Toast.LENGTH_LONG).show();
            search.setEnabled(false);
        }

        else
        {
            search.setEnabled(true);
        }



//get current time method
 public static String getCurrentTimeStamp() {
        SimpleDateFormat sdfDate = new SimpleDateFormat("HH:mm");//dd/MM/yyyy
        Date now = new Date();
        String strDate = sdfDate.format(now);
        return strDate;
    }

答案 5 :(得分:0)

所以我的解决方案有点不同,它首先创建一个具有当前时间的时钟,然后测试用户定义的小时。

    public void TextClockWindow() {

    this.pack();

    javax.swing.Timer t = new javax.swing.Timer(1000, (ActionEvent e) -> {
        Calendar calendar = new GregorianCalendar();
        String am_pm;
        calendar.setTimeZone(TimeZone.getDefault());

        Calendar now = Calendar.getInstance();
        int h = now.get(Calendar.HOUR_OF_DAY);
        int m = now.get(Calendar.MINUTE);
        int s = now.get(Calendar.SECOND);

        if (calendar.get(Calendar.AM_PM) == 0) {
            am_pm = "AM";

        } else {
            am_pm = "PM";

        }   // Code to Determine whether the time is AM or PM

        Clock.setText("" + h + ":" + m + " " + am_pm);

        if(h < 5) { //int here which tests agaisnt the hour evwery second
        System.out.println("Success");
        } else {
        System.out.println("Failure"); 
        }
    });
    t.start();
}

答案 6 :(得分:0)

此代码将检查用户输入的时间当前系统时间,并将返回时差设为长值。

public long getTimeDifferenceInMillis (String dateTime) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        long currentTime = new Date().getTime();
        long endTime = 0;

        try {
            //Parsing the user Inputed time ("yyyy-MM-dd HH:mm:ss")
            endTime = dateFormat.parse(dateTime).getTime(); 
        } catch (ParseException e) {
            e.printStackTrace();
            return 0;
        }

        if (endTime > currentTime)
            return endTime - currentTime;
        else
            return 0;
    }

用户应以“ yyyy-MM-dd HH:mm:ss” 格式打发时间。