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を使用して 2 つの を直接追加することはできません。+ただし、特定の時間数または分数を追加したり、タイムスタンプを追加したりすることはできます。

ただし、JDK Time API が壊れているという一般的なコンセンサスがあるようですPeriodにまたはDurationを追加するなどの追加機能を提供する Joda Time の使用を推奨しています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 に答える