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

后端 未结 4 1936
醉话见心
醉话见心 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.
    

提交回复
热议问题