我正在使用SimpleDateFormatter
public static final DateFormat DATE_FORMAT_FULL_FULL_SPACES =
new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
当时传递和Current Date
,它应显示为
1st JULY 2014
其中st应为上标。
我怎样才能更进一步?
答案 0 :(得分:6)
创建这些方法
private String getFormatedDate(){
String dayNumberSuffix = getDayNumberSuffix(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
SimpleDateFormat dateFormat = new SimpleDateFormat(" d'" + dayNumberSuffix + "' MMMM yyyy");
return dateFormat.format(Calendar.getInstance().getTime());
}
private String getDayNumberSuffix(int day) {
if (day >= 11 && day <= 13) {
return "<sup>th</sup>";
}
switch (day % 10) {
case 1:
return "<sup>st</sup>";
case 2:
return "<sup>nd</sup>";
case 3:
return "<sup>rd</sup>";
default:
return "<sup>th</sup>";
}
}
如何致电?
String str = getFormatedDate();
txtDate.setText(Html.fromHtml(str));
OutPut:
答案 1 :(得分:2)
上标部分不是这里的第一个棘手的部分 - 虽然它不清楚 你是否希望它仍然被表示(HTML {{1}标签?别的东西?)
第一个棘手的部分是知道如何获得序数(<sup>
,st
,nd
,rd
)并适当地针对不同的文化(可以有非常不同的规则)。据我所知,这不是th
支持的内容。您还应该意识到,不同的文化可能不会使用SimpleDateFormat
作为正常的完整日期格式 - 对某些人来说可能看起来很奇怪。
我会非常仔细地考虑:
如果您只需要处理英语,那么序数部分就不会太难(您可以在线找到dd MMMM yyyy
方法的示例,或者在5分钟内编写自己的方法)。如果您也乐意永远使用&#34;第一天&#34;格式,那么您可能只需要格式化String getOrdinal(int value)
中的月份和年份,例如
SimpleDateFormat
public String formatWithOrdinal(Calendar calendar) {
DateFormat formatter = new SimpleDateFormat(" MMMM yyyy", Locale.getDefault());
formatter.setTimeZone(calendar.getTimeZone());
int day = calendar.get(Calendar.DATE);
return day + toSuperscript(getOrdinal(day)) + formatter.format(calendar.getTime());
}
将使用HTML或您需要的任何内容来代替值。
简而言之,您在这里有很多可分离的问题 - 我强烈建议您将它们分开,制定出您的确切要求,然后尽可能简单地实施它们。