0

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 beginner so please explain it a little bit =)

Renato Gama
  • 16,431
  • 12
  • 58
  • 92
nwz_
  • 1
  • 1
  • 2
  • 1
    You don't need to "tag" your title. Just use tags to classify your question. – davidbuzatto Jul 23 '12 at 02:52
  • 2
    What have you tried yet? What's your problem? You don't know how to read from file? or you don't know how to convert string to date? or you don't know how to get current time? or you don't know how to compare two date? – Adrian Shum Jul 23 '12 at 03:44

4 Answers4

1

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

ali haider
  • 19,175
  • 17
  • 80
  • 149
1

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.

Makoto
  • 104,088
  • 27
  • 192
  • 230
Sean F
  • 2,352
  • 3
  • 28
  • 40
1

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();
}
davidbuzatto
  • 9,207
  • 1
  • 43
  • 50
1

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.
Basil Bourque
  • 303,325
  • 100
  • 852
  • 1,154