1

2013-08-30T15:06:003 つの文字列を使用するような形式で DateTime 文字列を作成したいと考えて"30-aug-2013""15:06"ます。日の値は過去の日付を作成するためのものであるため、この場合、日付は8 月30 日から8 月 28日に変更されます。"2""2013-08-28T15:06:00"

私が試した解決策:

public String getFormattedDate(String date, String selectedDays, String time) {
    String dtStart = date;  
    SimpleDateFormat  format = new SimpleDateFormat("dd-MM-yyyy");  
    try {  
        Date dateObject = format.parse(dtStart);  
        System.out.println(date);  
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(dateObject);
        calendar.add(Calendar.DAY_OF_MONTH, Integer.valueOf(selectedDays));
        System.out.println(calendar.getTime()); 
    } catch (ParseException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }
}

上記のソリューションでは、日付から日数を削除する代わりに日数を追加します。また、時間文字列を使用して日付オブジェクトに設定するcalendar.add方法もわかりません。

4

4 に答える 4

2

時間が常にその形式である場合は、 を使用して時間と分を取得するString必要があります。time.split(":")

Localeデフォルトの形式を使用する代わりに、出力形式を指定することもできます。

を加算する代わりに、マイナス記号を追加して減算しCalendar.add()ます。

あなたのコードは使用してdd-MM-yyyyいますが、月の部分が書かれているので、代わりに08-aug-2013使用して解析する必要があります。dd-MMM-yyyy

これは、指定したとおりに出力されるはずです

  public static String getFormattedDate(String date, String selectedDays, String time) {
    String dtStart = date;
    Calendar calendar = new GregorianCalendar();
    calendar.clear();
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy"); // This should be MMM and not MM according to the date format 08-aug-2013
    try {
      Date dateObject = format.parse(dtStart);
      System.out.println(date);
      calendar.setTime(dateObject);
      String[] hoursMins = time.split(":");
      int hours = Integer.valueOf(hoursMins[0]);
      int minutes = Integer.valueOf(hoursMins[1]);
      calendar.set(Calendar.HOUR_OF_DAY, hours);
      calendar.set(Calendar.MINUTE, minutes);
      calendar.set(Calendar.SECOND, 0); // Here, I have no idea where you get the seconds, so I just set them to 0
      calendar.add(Calendar.DAY_OF_MONTH, -Integer.valueOf(selectedDays)); // Add a minus sign to substract
      // System.out.println(calendar.getTime());
      // Use a SimpleDateFormat instead

      System.out.println(outputFormat.format(calendar.getTime()));
      // System.out.println(calendar.getTime());
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return outputFormat.format(calendar.getTime());
  }

シンボルの書式設定について読むのに適した場所については、このリンクの下部を確認してください。かなりよく説明されています。

getFormattedDate("08-aug-2013", "2", "15:05");このコード出力で呼び出します2013-08-06T15:05

編集:秒を忘れました。出力は次のとおりです:2013-08-06T15:05:00

于 2013-09-04T13:11:06.953 に答える
0
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);

String date = mYear + "-" + mMonth + "-" + mDay; // + time + ... so on
于 2013-09-04T12:58:03.850 に答える
0

Calendar.add負の値を追加して日数を削除できます:

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");  <-- check your format      
Date d = format.parse("08-aug-2013");

Calendar c = new GregorianCalendar();
c.setTime(d);
c.add(Calendar.DAY_OF_MONTH, -2);  <-- see that you are parsing to a negative int
System.out.println(c.getTime());

版画:

火曜日 8 月 06 日 00:00:00 EDT 2013

于 2013-09-04T13:11:49.747 に答える
0

juDate と .Calendar を避ける

java.util.Date および .Calendar クラスは厄介なことで有名です。それらを避けてください。代わりにJoda-Timeライブラリを使用してください。

タイムゾーン

他の回答は、タイムゾーンの重要な問題を無視しています。この文字列がパリ、トゥクウィラ、コルカタのいずれで日時を表すかを指定する必要があります。指定しない場合は、JVM のデフォルトのタイム ゾーンが適用されます。

言語

他の回答では、月名を解析する言語を指定できません。

Joda-Time の使用例

String input = "30-aug-2013" + "15:06";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d-MM-yyyyH:mm" );
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
java.util.Locale locale = java.util.Locale.ENGLISH;
DateTime dateTime = formatter.withLocale( locale ).withZone( timeZone ).parseDateTime( input" );

必要に応じて、java.util.Date に変換し、日付にはタイム ゾーンがないため、自動的に UTC に調整します。

java.util.Date date = dateTime.toDate();
于 2014-06-05T18:43:20.960 に答える