196

私はJavaが初めてで、通常はPHPを使用しています。

この文字列を変換しようとしています:

2011 年 3 月 14 日月曜日 16:02:37 GMT

次のように年と月を簡単に取得できるように、Calendar オブジェクトに入れます。

String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);

手動で解析するのは悪い考えでしょうか? 部分文字列メソッドを使用していますか?

アドバイスがあれば助かります。

4

8 に答える 8

444
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done

注:Locale環境/要件に応じて設定してください


関連項目

于 2011-03-14T16:16:51.680 に答える
24
于 2016-11-01T22:44:50.830 に答える
14

そうですね、 のようなクラスに既に存在するコードを複製するのは悪い考えだと思いますSimpleDateFormat

一方、個人的には、可能であれば完全に回避Calendarし、代わりにJoda Timeを使用することをお勧めします。これは、はるかに優れた設計の日付と時刻 API です。たとえば、はスレッドセーフではないことに注意する必要があるため、使用するたびにスレッド ローカル、同期、または新しいインスタンスが必要になります。Joda パーサーとフォーマッタースレッドセーフです。DateSimpleDateFormat

于 2011-03-14T16:11:31.523 に答える
10

新しい Calendar を作成する必要はありません。SimpleDateFormat はすでにその下の Calendar を使用しています。

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US);
Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
Calendar cal = sdf.getCalendar();

(まだコメントできないので、新しい回答を作成しました)

于 2015-11-18T08:49:38.143 に答える
6

SimpleDateFormatは素晴らしいですが、時間で作業する場合とHHは異なることに注意してください。は 24 時間ベースの時間を返し、hh は 12 時間ベースの時間を返します。hhHH

たとえば、次は 12 時間の時間を返します。

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");

これは24時間の時間を返しますが:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
于 2013-06-25T05:29:57.557 に答える
3

はい、自分で解析するのは悪い習慣です。SimpleDateFormatを見てください。文字列が日付に変換され、日付を Calendar インスタンスに設定できます。

于 2011-03-14T16:12:22.660 に答える
1

簡単な方法:

public Calendar stringToCalendar(String date, String pattern) throws ParseException {
    String DEFAULT_LOCALE_NAME = "pt";
    String DEFAULT_COUNTRY = "BR";
    Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY);
    SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE);
    Date d = format.parse(date);
    Calendar c = getCalendar();
    c.setTime(d);
    return c;
}
于 2016-11-01T19:53:45.793 に答える