0

我在 Java 1.7 中有以下代码:

DateFormat df = DateFormat.getInstance();
Date startDate = df.parse("07/28/12 01:00 AM, PST");

上述日期时间(07/28/12 01:00 AM,PST)位于可配置的属性文件中。如果这个日期时间已经过去,那么我需要获取当前日期,从上面的字符串中设置时间部分,即当前日期的 01:00 AM PST & 如果这个时间也已经过去,那么获取第二天 &从上面的字符串中设置时间部分。最终对象应该是 Date 因为我需要在 Timer 对象中使用它。

我怎样才能有效地做到这一点?我应该从日期转换为日历还是反之亦然?任何人都可以提供片段吗?

4

2 回答 2

2

你应该去Calendar上课。您可以使用以下结构:

    Calendar cal = Calendar.getInstance();
    cal.setTime(startDate);
    cal.add(Calendar.DAY_OF_YEAR, 1);

它还具有检查您startDate的日期before()after()新日期(使用当前时间)的方法。

在编写内置的 Java 日期/时间结构时,如果我没有插入Joda Time,我会失职,许多人认为它优于本地 Java 实现。

编辑:

显示该过程的示例会更有效Date.compareTo(),因为需要Calendar.before()Calendar.after()其他Calendar对象进行比较,这可能会很昂贵。

看看以下内容:

    DateFormat df = DateFormat.getInstance();
    Date startDate = df.parse("07/28/12 01:00 AM, PST");
    Calendar cal = Calendar.getInstance();
    cal.setTime(startDate);
    Date now = new Date();
    if (startDate.compareTo(now)< 0) {
        System.out.println("start date: " + startDate + " is before " + now);

        Calendar nowCal = Calendar.getInstance();
        nowCal.add(Calendar.DAY_OF_YEAR,1);
        cal.set(Calendar.DAY_OF_YEAR, nowCal.get(Calendar.DAY_OF_YEAR));

    } else  if (startDate.compareTo(now) == 0) {
        System.out.println("startDate: " +startDate + " is equal to " + now);
    } else {
        System.out.println("startDate: " + cal + " is after " + now);

    }
    System.out.println(cal.getTime());
于 2012-07-31T01:21:02.830 回答
0

我认为这应该可以工作...您的算法让我有些头晕,而且我在不同的时区,所以您的原始字符串不起作用:P

    try {

        DateFormat df = DateFormat.getInstance();
        Date startDate = df.parse("28/07/2012 01:00 AM");

        System.out.println("StartDate = " + startDate);

        Date callDate = startDate;

        Calendar today = Calendar.getInstance();
        Calendar start = Calendar.getInstance();
        start.setTime(startDate);

        System.out.println("Today = " + today.getTime());

        // If this date time is already passed
        // Tue Jul 31 12:18:09 EST 2012 is after Sat Jul 28 01:00:00 EST 2012
        if (today.after(start)) {

            //then I need to get the current date, set the time part from above string in the current date
            Calendar timeMatch = Calendar.getInstance();
            timeMatch.setTime(startDate);
            timeMatch.set(Calendar.DATE, today.get(Calendar.DATE));
            timeMatch.set(Calendar.MONTH, today.get(Calendar.MONTH));
            timeMatch.set(Calendar.YEAR, today.get(Calendar.YEAR));

            //& if this time is also already passed, then get the next day & set the time part from above string in it
            if (timeMatch.after(today)) {

                timeMatch.add(Calendar.DATE, 1);

            }

            callDate = timeMatch.getTime();

        }

        System.out.println("CallDate = " + callDate);

    } catch (ParseException exp) {

        exp.printStackTrace();

    }

这会产生以下输出

StartDate = Sat Jul 28 01:00:00 EST 2012
Today = Tue Jul 31 12:18:09 EST 2012
CallDate = Tue Jul 31 01:00:00 EST 2012
于 2012-07-31T02:20:53.777 回答