3
private String setDate(int day) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    cal.add(Calendar.DATE, + day);
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    String formattedDate = df.format(cal.getTime());
    return formattedDate;
}

上記のメソッドは、に対して「14/06/12」を返し、に対して「06/14/12」を返しLocale.UKますLocale.US

どうすれば年を完全に返すことができますか。つまり、米国ロケールの場合は「14/06/2012」、英国ロケールの場合は「06/14/2012」です。

4

3 に答える 3

8

JHSの答えはほぼ完成しています。実行する必要があるのは、すべてのロケールで機能するようにすることだけです。

import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Locale;

class ChangeDateFormat
{
    private String setDate(int day, Locale locale) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, +day);
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
        if (df instanceof SimpleDateFormat)
        {
            SimpleDateFormat sdf = (SimpleDateFormat) df;
            // To show Locale specific short date expression with full year
            String pattern = sdf.toPattern().replaceAll("y+","yyyy");
            sdf.applyPattern(pattern); 
            return sdf.format(cal.getTime());
        }
        String formattedDate = df.format(cal.getTime());
        return formattedDate;
    }

    public static void main(String[] args)
    {
        ChangeDateFormat cdf = new ChangeDateFormat();        
        System.out.println(cdf.setDate(1, Locale.JAPAN));
    }
}

グレッグのコメント(グレッグに感謝)に続いて、javadocからの関連するメモがあります:

「フォーマットや解析をさらに細かく制御したい場合(またはユーザーにもっと細かく制御したい場合)はDateFormat、ファクトリメソッドから取得したメソッドをにキャストしてみてくださいSimpleDateFormat。これはほとんどの国で機能します。覚えておいてください。try異常なものに遭遇した場合に備えて、ブロックに入れてください。」

于 2012-06-14T02:31:07.890 に答える
2

パターンを取得し、フォーマットにlocale追加する必要yyがあります。

これはあなたを助けるかもしれません-

private String setDate(int day) {
  Calendar cal = Calendar.getInstance();
  cal.setTime(new Date());
  cal.add(Calendar.DATE, + day);    
  DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
  // code modified from here
  SimpleDateFormat sdf = (SimpleDateFormat) df;
  sdf.applyPattern(sdf.toPattern().replace("yy","yyyy")); // replacing to yyyy
  String formattedDate = sdf.format(cal.getTime());
  return formattedDate;
}

これは、最終的に2桁の年を返すすべてのパターンで機能します。

私は、最終的に持っていたsdf.toPattern.concat("yy")人だけのために働くだろうと思っていました。ただし、Dragon66の使用するアイデアは、すべての場合に機能します。Localeyyreplace("yy", "yyyy")Locale

于 2012-06-13T23:40:40.280 に答える
0

パターンを取得して2年から4年に変更できるように、自分DateFormatがのインスタンスであることを期待する必要があります。SimpleDateFormat

于 2012-06-13T23:19:44.753 に答える