4
'2009-12 Dec' should be converted to '31-DEC-2009'
'2010-09 Sep' should be converted to '30-SEP-2010'
'2010-02 Feb' should be converted to '28-FEB-2010'
'2008-02 Feb' should be converted to '29-FEB-2008'

2009-12Dec2008-02Febがドロップダウンでユーザーに表示されます。ユーザーには、曜日を選択するオプションがありません。

ユーザーが選択した値をデータベースに渡す必要があります。ただし、データベースは次の形式の日付を想定していますDD-MMM-YYYY。クエリには' <= USER_DATE'条件があります。したがって、月の最終日が自動的に選択され、データベースに渡される必要があります。

Plは、上記の仕事をする関数を書くのを手伝ってくれます。

static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM MMM");

    public static String convertMapedToSqlFormat(final String maped) {
        String convertedMaped = null;
        //....
        return convertedMaped;
    }

    @Test
    public void testConvertMapedToSqlFormat() {
        String[] mapedValues = { "2009-12 Dec", "2009-11 Nov", "2009-10 Oct",
                "2009-09 Sep", "2009-08 Aug", "2009-07 Jul", "2009-06 Jun",
                "2009-05 May", "2009-04 Apr", "2009-03 Mar", "2009-02 Feb",
                "2009-01 Jan", "2008-12 Dec", "2008-11 Nov", "2008-10 Oct" };
        for (String maped : mapedValues) {
            System.out.println(convertMapedToSqlFormat(maped));
        }
    }
4

5 に答える 5

7

に変換してCalendar使用Calendar#getActualMaximum()し、月の最終日を取得して日を設定します。

キックオフの例:

String oldString = "2009-12 Dec";
Calendar calendar = Calendar.getInstance();
calendar.setTime(new SimpleDateFormat("yyyy-MM").parse(oldString)); // Yes, month name is ignored but we don't need this.
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
String newString = new SimpleDateFormat("dd-MMM-yyyy").format(calendar.getTime()).toUpperCase();
System.out.println(newString); // 31-DEC-2009
于 2010-10-01T13:35:34.013 に答える
2
  • 日付を解析するためにあなたのDateFormat(しかしそれを修正する)を使用してくださいyyyy-dd MMM
  • に変換DateするCalendar
  • 使用するCalendar.getActualMaximim()
  • dd-MMM-yyyy取得した日付をフォーマットするために使用します。
  • 電話.toUpperCase()

それで:

static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM MMM");
static SimpleDateFormat dbDateFormat = new SimpleDateFormat("yyyy-MMM-dd");

public static String convertMapedToSqlFormat(final String maped) {
    Date date = dateFormat.parse(mapped);
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    return dbDateFormat.format(cal.getTime()).toUpperCase();
}

いくつかの注意:

于 2010-10-01T13:31:32.570 に答える
1

文字列のYYYY-MM部分から年と月を取得します。

JODAを使用して、その月の初日に対応する時点を作成します。1か月前に移動し、1日前に移動します。必要な文字列表現に時間をフラット化します。

于 2010-10-01T13:32:56.733 に答える
0

こんにちはあなたはそのようにあなたの日付を解析する必要があります

      SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
      Date du = new Date();
      du = df.parse(sDate);
      df = new SimpleDateFormat("yyyy-MM-dd");
      sDate = df.format(du);

お役に立てれば。もしそうなら私に知らせてください。

PK

于 2010-10-01T13:30:48.033 に答える
0

java.time

ここで質問やその他の回答に見られる厄介な古い日時クラスに取って代わる最新のjava.timeクラスを使用すると、はるかに簡単になります。

java.timeフレームワークは、 Java8以降に組み込まれています。java.util.Dateこれらのクラスは、、、、などの古い厄介な日時クラスに取って代わり.Calendarますjava.text.SimpleDateFormat

現在、メンテナンスモードでは、 Joda -Timeプロジェクトはjava.timeへの移行もアドバイスしています。

詳細については、 Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。

java.time機能の多くはThreeTenのJava6および7にバックポートされています-バックポートされ、ThreeTenABPのAndroidさらに適合されています。

ThreeTen -Extraプロジェクトは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性のある試験場です。

YearMonth

YearMonthクラスはあなたが望むものだけを提供します。

YearMonth start = YearMonth.of( 2008 , Month.OCTOBER );
YearMonth stop = YearMonth.of( 2009 , Month.DECEMBER );
List<YearMonth> yms = new ArrayList<>();
YearMonth ym = start ;
while( ! ym.isAfter( stop ) ) {
    yms.add( ym );
    // Set up the next loop.
    ym = ym.plusMonths( 1 ); 
}

提示するには、を使用しDateTimeFormatterて値の文字列表現を生成しYearMonthます。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM MMM" );
f = f.withLocale( Locale.CANADA_FRENCH );  // Or Locale.US etc.
String output = ym.format( f );

月の最終日を取得するには、YearMonthオブジェクトに問い合わせます。

LocalDate endOfMonth = ym.atEndOfMonth();

提示するには、を使用しDateTimeFormatterます。指定されたに適切なものを自動的にローカライズするフォーマッタをインスタンス化するかLocale、独自のフォーマットパターンを指定します。StackOverflowに関する他の多くの質問と回答に何度も表示されます。

于 2016-08-13T05:42:16.270 に答える