0

我有一个通常格式为“HH:mm:ss”的字符串,但也可以显示为“x 天 HH:mm:ss”。我必须将它解析为 Date 对象,并且我想从字符串计算这段时间之后它将是什么 Date。如何做呢?

Date now = new Date();
Date delay = new SimpleDateFormatter("HH:mm:ss").parse(myString);
Date after = new Date(now.getTime() + delay.getTime());

但不幸的是,它不起作用。它增加了,但作为“延迟”的价值非常小

4

4 回答 4

3

您不能Date使用运算符直接添加两个 s +。但是,您可以添加一定数量的小时或分钟,或添加它们的时间戳。

但是,似乎普遍认为 JDK Time API 已损坏。他们推荐使用 Joda Time,它提供了额外的功能,例如添加 aPeriodDuration到 a DateTime

DateTime dt = new DateTime(2005, 3, 26, 12, 0, 0, 0);
DateTime plusPeriod = dt.plus(Period.days(1));
DateTime plusDuration = dt.plus(new Duration(24L*60L*60L*1000L));

有关更多信息,请参阅http://joda-time.sourceforge.net/quickstart.html

于 2013-06-14T16:52:22.960 回答
1

你会想尝试这样的事情:

Date now = new Date();
Date delay = new SimpleDateFormat("HH:mm:ss").parse("02:15:30");
Date after = new Date(now.getTime() + delay.getTime());
于 2013-06-14T16:51:59.957 回答
1

强调:

  • 用于String.split确定您是否有时间或持续时间和时间。
  • 假设日期持续时间从当前日期开始。
  • 持续时间将是当前日期 + (持续时间 -1) 天(示例不验证持续时间)。
  • 用于Calendar日期的东西。
  • Calendar.add(Calendar.DAY_OF_YEAR, xxx)给出结束日期。

尝试这样的事情:

public class LearnDate
{
    private static DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");

    public static void main(final String[] arguments)
        throws ParseException
    {
        final String input1 = "14:21:15";
        final String input2 = "4 days 15:14:15";

        printDateInfo(input1);
        printDateInfo(input2);
    }

    private static String formatCalendar(final Calendar input)
    {
        return
            "" +
            input.get(Calendar.DAY_OF_MONTH) +
            monthName(input.get(Calendar.MONTH)) +
            input.get(Calendar.YEAR) +
            " " +
            timeFormat.format(input.getTime());
    }

    private static String monthName(final int month)
    {
        switch (month)
        {
            case Calendar.JANUARY:
                return "Jan";

            case Calendar.FEBRUARY:
                return "Feb";

            case Calendar.MARCH:
                return "Mar";

            case Calendar.APRIL:
                return "Apr";

            case Calendar.MAY:
                return "May";

            case Calendar.JUNE:
                return "Jun";

            case Calendar.JULY:
                return "Jul";

            default:
                return "blah";
        }
    }

    private static void printDateInfo(final String input)
        throws ParseException
    {
        String[] parsedInput = input.split(" ");
        Date time = null;

        if (parsedInput != null)
        {
            switch (parsedInput.length)
            {
                case 1:
                    time = timeFormat.parse(parsedInput[0]);
                    System.out.println("Just Time: " + timeFormat.format(time));
                    break;

                case 3:
                {
                    int duration;
                    Calendar end = Calendar.getInstance();
                    Calendar start = Calendar.getInstance();
                    Calendar timeValue = Calendar.getInstance();

                    time = timeFormat.parse(parsedInput[2]);
                    System.out.println("Time: " + timeFormat.format(time));
                    System.out.println("Duration: " + parsedInput[0] + " days.");

                    timeValue.setTime(time);
                    transferTime(start, timeValue);
                    transferTime(end, timeValue);

                    duration = Integer.parseInt(parsedInput[0]) - 1;
                    end.add(Calendar.DAY_OF_YEAR, duration);

                    System.out.println("Start: " + formatCalendar(start));
                    System.out.println("  End: " + formatCalendar(end));
                }
                    break;

                default:
                    System.out.println("Unrecognized format: " + input);
                    break;
            }
        }
    }

    private static void transferTime(
        final Calendar destination,
        final Calendar source)
    {
        destination.set(Calendar.HOUR_OF_DAY, source.get(Calendar.HOUR_OF_DAY));
        destination.set(Calendar.MINUTE, source.get(Calendar.MINUTE));
        destination.set(Calendar.SECOND, source.get(Calendar.SECOND));
    }
}
于 2013-06-14T17:49:02.630 回答
0

日期在内部使用 long 表示时间,请尝试以下操作:

Date after = new Date(now.getTime() + delay.getTime());
于 2013-06-14T16:52:45.573 回答