使用当前电话格式将月份号码替换为月份名称

时间:2016-03-03 10:20:08

标签: android jodatime

我使用joda-time来处理DateTime。我用这个获得了手机的日期格式:

SimpleDateFormat dateFormat = (SimpleDateFormat) DateFormat.getDateFormat(context);
String datePattern = dateFormat.toPattern();

然后我使用以下格式将DateTime格式化为String:

DateTimeFormatter dateFormatter = DateTimeFormat.forPattern(datePattern);
dateFormatter.print(dateTime)

示例,它将DateTime显示为String:

  

2016年3月1日

但我希望它显示:

  

三月/二千〇一十六分之一

  

月/2016分之1

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法

public static String getDateFormattedString(String sourceFormat,String dateString,String targetFormat) {
    SimpleDateFormat mOriginalFormat = new SimpleDateFormat(sourceFormat);//3/1/2016
    SimpleDateFormat mTargetFormat = new SimpleDateFormat(targetFormat);//Mar/1/2016

    String reqstring = null;
    try {
        reqstring = mTargetFormat.format(mOriginalFormat.parse(dateString));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return reqstring;
}

然后致电

String resultantDate=getDateFormattedString("MM/dd/yyyy", "3/1/2016", "MMM/d/yyyy");

使用目标格式:MMM/d/yyyy for Mar/1/2016MMMMM/d/yyyy forar March/1/2016

答案 1 :(得分:0)

您必须编辑图案以达到所需效果。提案:

java.util.Date d = new Date();
SimpleDateFormat dateFormat = (SimpleDateFormat) DateFormat.getDateFormat(context);
String pattern = dateFormat.toPattern();

DateTime joda = new DateTime(d); // in default timezone
DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern).withLocale(Locale.ENGLISH);
System.out.println("old format: " + fmt.print(joda));

// does not handle the case where the month appears twice or more in pattern (simplification)
int count = 0;
for (int i = 0; i < pattern.length(); i++) {
    if (pattern.charAt(i) == 'M') {
        count++;
    }
}

// your first configuration parameter
boolean wantsAbbreviation = false;

// your second configuration parameter - consider Locale.getDefault()
Locale locale = Locale.ENGLISH; 

String replacement = (wantsAbbreviation ? "MMM" : "MMMM");

if (count == 2) {
    pattern = pattern.replace("MM", replacement);
} else if (count == 1) {
    pattern = pattern.replace("M", replacement);
} else {
    // either no month or already text format
}

DateTimeFormatter fmtNew = DateTimeFormat.forPattern(pattern).withLocale(locale);
System.out.println("new format: " + fmtNew.print(joda));

// old format: 03/03/2016
// new format: March/03/2016

但是,我不保证手机格式总是使用Joda-Time理解的模式字母,因为SimpleDateFormat和Joda-Time格式模式定义不相同。但至少对于月份模式符号&#34; M&#34;,它应该有效。最后你还要查看字母&#34; L&#34; (以独立格式表示的月份,与许多斯拉夫语言相关),但Joda-Time并不理解这封信。

答案 2 :(得分:-1)

试试这个......

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date_1 = sdf1.parse("2016-03-08");
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MMM/yyyy");
System.out.println(sdf2.format(date_1));