如何使用Suffix格式化当前日期到Superscript?

时间:2014-10-13 10:28:27

标签: java android

我正在使用SimpleDateFormatter

 public static final DateFormat DATE_FORMAT_FULL_FULL_SPACES = 
     new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
当时传递

Current Date,它应显示为       1st JULY 2014其中st应为上标。

我怎样才能更进一步?

2 个答案:

答案 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:

enter image description here

答案 1 :(得分:2)

上标部分不是这里的第一个棘手的部分 - 虽然它不清楚 你是否希望它仍然被表示(HTML {{1}标签?别的东西?)

第一个棘手的部分是知道如何获得序数(<sup>stndrd)并适当地针对不同的文化(可以有非常不同的规则)。据我所知,这不是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或您需要的任何内容来代替值。

简而言之,您在这里有很多可分离的问题 - 我强烈建议您将它们分开,制定出您的确切要求,然后尽可能简单地实施它们。