获取本地化的短日期模式为String?

时间:2013-09-17 22:09:09

标签: android date localization

我希望将“短日期”模式设为String,并根据用户的区域设置进行自定义(例如“E dd MMM”)。我可以使用
轻松获得本地化的DateFormat - 对象 DateFormat mDateFormat = android.text.format.DateFormat.getDateFormat(mContext);
但是DateFormat没有.toPattern() - 方法。

如果我使用

SimpleDateFormat sdf = new SimpleDateFormat();
String mDateFormatString = sdf.toPattern();

我不知道如何只获取日期模式字符串而不是完整的M/d/yy h:mm a

3 个答案:

答案 0 :(得分:2)

我最终使用

String deviceDateFormat = DateFormat.getBestDateTimePattern(Locale.getDefault(), "E dd MMM");

将为我提供所提供输入格式的“最佳区域代表”,在本例中为工作日,日期和月份。

答案 1 :(得分:1)

记住DateFormatSimpleDateFormat的基类,所以你总是可以投射它并抓住模式。

final DateFormat shortDateFormat = android.text.format.DateFormat.getDateFormat(context.getApplicationContext());

// getDateFormat() returns a SimpleDateFormat from which we can extract the pattern
if (shortDateFormat instanceof SimpleDateFormat) {
    final String pattern = ((SimpleDateFormat) shortDateFormat).toPattern();

答案 2 :(得分:0)

你可以尝试这样的事情:

public String toLocalHourOrShortDate(String dateString, Context context) {
    java.text.DateFormat dateFormat = DateFormat.getDateFormat(context);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    Date date = null;
    try {
        date = sdf.parse(dateString);
        Calendar thisMoment = Calendar.getInstance();
        Calendar eventTime = new GregorianCalendar(Locale.getDefault());
        eventTime.setTime(date);
        if (thisMoment.get(Calendar.YEAR) == eventTime.get(Calendar.YEAR) &&
                thisMoment.get(Calendar.MONTH) == eventTime.get(Calendar.MONTH) &&
                thisMoment.get(Calendar.DAY_OF_MONTH) == eventTime.get(Calendar.DAY_OF_MONTH)) {
            SimpleDateFormat hourDateFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());
            return hourDateFormat.format(eventTime.getTime());
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return dateFormat.format(date);
}

这对你有用吗?