我使用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
我该怎么做?
答案 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/2016
和MMMMM/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));