How do you format the day of the month to say “11th”, “21st” or “23rd” (ordinal indicator)?

后端 未结 20 887
逝去的感伤
逝去的感伤 2020-11-22 02:41

I know this will give me the day of the month as a number (11, 21, 23):

SimpleDateFormat formatDayOfMonth = new Simple         


        
相关标签:
20条回答
  • 2020-11-22 03:05

    I wrote my self a helper method to get patterns for this.

    public static String getPattern(int month) {
        String first = "MMMM dd";
        String last = ", yyyy";
        String pos = (month == 1 || month == 21 || month == 31) ? "'st'" : (month == 2 || month == 22) ? "'nd'" : (month == 3 || month == 23) ? "'rd'" : "'th'";
        return first + pos + last;
    }
    

    and then we can call it as

    LocalDate localDate = LocalDate.now();//For reference
    int month = localDate.getDayOfMonth();
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(getPattern(month));
    String date = localDate.format(formatter);
    System.out.println(date);
    

    the output is

    December 12th, 2018
    
    0 讨论(0)
  • 2020-11-22 03:08

    Many of the examples here will not work for 11, 12, 13. This is more generic and will work for all case.

    switch (date) {
                    case 1:
                    case 21:
                    case 31:
                        return "" + date + "st";
    
                    case 2:
                    case 22:
                        return "" + date + "nd";
    
                    case 3:
                    case 23:
                        return "" + date + "rd";
    
                    default:
                        return "" + date + "th";
    }
    
    0 讨论(0)
  • 2020-11-22 03:08

    The following method can be used to get the formatted string of the date which is passed in to it. It'll format the date to say 1st,2nd,3rd,4th .. using SimpleDateFormat in Java. eg:- 1st of September 2015

    public String getFormattedDate(Date date){
                Calendar cal=Calendar.getInstance();
                cal.setTime(date);
                //2nd of march 2015
                int day=cal.get(Calendar.DATE);
    
                switch (day % 10) {
                case 1:  
                    return new SimpleDateFormat("d'st' 'of' MMMM yyyy").format(date);
                case 2:  
                    return new SimpleDateFormat("d'nd' 'of' MMMM yyyy").format(date);
                case 3:  
                    return new SimpleDateFormat("d'rd' 'of' MMMM yyyy").format(date);
                default: 
                    return new SimpleDateFormat("d'th' 'of' MMMM yyyy").format(date);
            }
    
    0 讨论(0)
  • 2020-11-22 03:10
    String ordinal(int num)
    {
        String[] suffix = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"};
        int m = num % 100;
        return String.valueOf(num) + suffix[(m > 3 && m < 21) ? 0 : (m % 10)];
    }
    
    0 讨论(0)
  • 2020-11-22 03:12
    private String getCurrentDateInSpecificFormat(Calendar currentCalDate) {
        String dayNumberSuffix = getDayNumberSuffix(currentCalDate.get(Calendar.DAY_OF_MONTH));
        DateFormat dateFormat = new SimpleDateFormat(" d'" + dayNumberSuffix + "' MMMM yyyy");
        return dateFormat.format(currentCalDate.getTime());
    }
    
    private String getDayNumberSuffix(int day) {
        if (day >= 11 && day <= 13) {
            return "th";
        }
        switch (day % 10) {
        case 1:
            return "st";
        case 2:
            return "nd";
        case 3:
            return "rd";
        default:
            return "th";
        }
    }
    
    0 讨论(0)
  • 2020-11-22 03:13

    The following is a more efficient answer to the question rather than hard-coding the style.

    To change the day to ordinal number you need to use the following suffix.

    DD +     TH = DDTH  result >>>> 4TH
    
    OR to spell the number add SP to the format
    
    DD + SPTH = DDSPTH   result >>> FOURTH
    

    Find my completed answer in this question.

    0 讨论(0)
提交回复
热议问题