Check if 24 hours have passed (reading from a string)

后端 未结 4 1890
醉话见心
醉话见心 2021-01-28 04:37

I am saving date\'s in a file in the following format as a string.

Sat Jul 21 23:31:55 EDT 2012

How can I check if 24 hours have passed? I am a

相关标签:
4条回答
  • 2021-01-28 05:04

    Define A Day

    Do you really mean one day or 24-hours? Because of Daylight Saving Time nonsense, a day can vary in length such as 23 or 25 hours in the United States.

    Avoid 3-Letter Time Zone Codes

    That String format is a terrible representation of a date-time. It is difficult to parse. It uses a 3-letter time zone code, and such codes are neither standardized nor unique. If possible, choose another format. The obvious choice is ISO 8601, for example: 2014-07-08T04:17:01Z.

    Use proper time zone names.

    Avoid j.u.Date & .Calendar

    The java.util.Date and .Calendar classes bundled with Java are notoriously troublesome. Avoid them.

    Instead use either the venerable Joda-Time library or the new java.time package bundled in Java 8 (and inspired on Joda-Time).

    Joda-Time

    Here is some example code in Joda-Time.

    Get the current moment.

    DateTime now = DateTime.now();
    

    Parse the input string.

    String input = "Sat Jul 21 23:31:55 EDT 2012";
    DateTime formatter = DateTimeFormat.forPattern( "EEE MMM dd HH:mm:ss zzz yyyy" ).with Locale( java.util.Locale.ENGLISH );
    DateTime target = formatter.parseDateTime( input );
    

    Calculate 24 hours (or next day).

    DateTime twentyFourHoursLater = target.plusHours( 24 );
    

    Test if current moment happened after.

    boolean expired = now.isAfter( twentyFourHoursLater );
    

    Or, if you want next day rather than 24-hours, use plusDays rather than plusHours. If necessary, adjust to desired time zone. Time zone is crucial as it defines the day/date and applies rules for anomalies such as Daylight Saving Time.

    DateTime targetAdjusted = target.withZone( DateTimeZone.forID( "Europe/Paris" ) );
    …
    DateTime aDayLater = targetAdjusted.plusDays( 1 ); // Go to next day, accounting for DST etc.
    boolean expired = now.isAfter( aDayLater ); // Test if current moment happened after.
    
    0 讨论(0)
  • 2021-01-28 05:06

    I am not sure if I completely understood the question - do you have two dates for comparison or do you wish to keep checking periodically if 24 hours have elapsed? If comparing two date/times, I would suggest looking at joda or perhaps date4j. Using joda, one could look into using interval between two dates:

    Interval interval = new Interval(previousTime, new Instant());
    

    where previous time would be the time you mentioned

    0 讨论(0)
  • 2021-01-28 05:11

    I would suggest storing your information as a java.util.Calendar which has a compareTo ()function.

    If you want to compare now to current time, you can use System.getCurrentTimeMillis() to get the current time.

    0 讨论(0)
  • 2021-01-28 05:26

    You can do something like this:

    try {
    
        // reading text...
        Scanner scan = new Scanner( new FileInputStream( new File( "path to your file here..." ) ) );
        String dateString = scan.nextLine();
    
        // creating a formatter.
        // to understand the format, take a look here: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
        // EEE: Day name of week with 3 chars
        // MMM: Month name of the year with 3 chars
        // dd: day of month with 2 chars
        // HH: hour of the day (0 to 23) with 2 chars
        // mm: minute of the hour with 2 chars
        // ss: second of the minute with 2 chars
        // zzz: Timezone with 3 chars
        // yyyy: year with 4 chars
        DateFormat df = new SimpleDateFormat( "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US );
    
        // parsing the date (using the format above, that matches with your date string)
        Date date = df.parse( dateString );
    
        // now!
        Date now = new Date();
    
        // gets the differente between the parsed date and the now date in milliseconds
        long diffInMilliseconds = now.getTime() - date.getTime();
    
        if ( diffInMilliseconds < 0 ) {
            System.out.println( "the date that was read is in the future!" );
        } else {
    
            // calculating the difference in hours
            // one hour have: 60 minutes or 3600 seconds or 3600000 milliseconds
            double diffInHours = diffInMilliseconds / 3600000D;
            System.out.printf( "%.2f hours have passed!", diffInHours );
    
        }
    
    } catch ( FileNotFoundException | ParseException exc ) {
        exc.printStackTrace();
    }
    
    0 讨论(0)
提交回复
热议问题