0

我将日期保存在以下格式的文件中作为字符串。

Sat Jul 21 23:31:55 EDT 2012

如何查看是否已过 24 小时?我是初学者所以请解释一下=)

4

4 回答 4

1

我建议将您的信息存储为java.util.Calendar具有compareTo ()功能的信息。

如果要将现在与当前时间进行比较,可以使用System.getCurrentTimeMillis()获取当前时间。

于 2012-07-23T02:53:58.067 回答
1

你可以这样做:

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();
}
于 2012-07-23T03:17:57.797 回答
1

我不确定我是否完全理解了这个问题 - 您是否有两个日期进行比较,或者您是否希望在 24 小时后继续定期检查?如果比较两个日期/时间,我建议查看 joda 或 date4j。使用 joda,可以研究使用两个日期之间的间隔:

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

以前的时间是你提到的时间

于 2012-07-23T02:53:18.933 回答
1

定义一天

你真的是指一天还是24小时?由于夏令时的废话,一天的长度可能会有所不同,例如在美国是 23 或 25 小时。

避免使用 3 个字母的时区代码

该字符串格式是日期时间的可怕表示。很难解析。它使用 3 个字母的时区代码,此类代码既不标准化也不唯一。如果可能,请选择其他格式。显而易见的选择是ISO 8601,例如:2014-07-08T04:17:01Z.

使用正确的时区名称

避免使用 juDate 和 .Calendar

与 Java 捆绑在一起的 java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。

取而代之的是使用古老的Joda-Time库或 Java 8 中捆绑的新 java.time 包(并受 Joda-Time 启发)。

乔达时间

这是 Joda-Time 中的一些示例代码。

获取当前时刻。

DateTime now = DateTime.now();

解析输入字符串。

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 );

计算 24 小时(或第二天)。

DateTime twentyFourHoursLater = target.plusHours( 24 );

测试当前时刻是否发生在之后。

boolean expired = now.isAfter( twentyFourHoursLater );

或者,如果您想要第二天而不是 24 小时,请使用plusDays而不是plusHours. 如有必要,调整到所需的时区。时区至关重要,因为它定义了日期/日期并应用了异常规则,例如夏令时

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.
于 2014-07-08T22:46:07.807 回答