12

我想在“6th 7th..等”度过这一天。日期字符串。

我已经尝试过SimpleDateFormater并且也尝试过DateFormatSymbols。我没有得到必需的字符串。

有什么解决方法吗?

4

9 回答 9

26
SimpleDateFormat format = new SimpleDateFormat("d");
String date = format.format(new Date());

if(date.endsWith("1") && !date.endsWith("11"))
    format = new SimpleDateFormat("EE MMM d'st', yyyy");
else if(date.endsWith("2") && !date.endsWith("12"))
    format = new SimpleDateFormat("EE MMM d'nd', yyyy");
else if(date.endsWith("3") && !date.endsWith("13"))
    format = new SimpleDateFormat("EE MMM d'rd', yyyy");
else 
    format = new SimpleDateFormat("EE MMM d'th', yyyy");

String yourDate = format.format(new Date());

试试这个,这看起来像一些静态的,但工作正常......

于 2012-04-25T13:54:30.167 回答
7

干得好:

/**
 * Converts Date object into string format as for e.g. <b>April 25th, 2012</b>
 * @param date date object
 * @return string format of provided date object
 */
public static String getCustomDateString(Date date){
    SimpleDateFormat tmp = new SimpleDateFormat("MMMM d");

    String str = tmp.format(date);
    str = str.substring(0, 1).toUpperCase() + str.substring(1);

    if(date.getDate()>10 && date.getDate()<14)
        str = str + "th, ";
    else{
        if(str.endsWith("1")) str = str + "st, ";
        else if(str.endsWith("2")) str = str + "nd, ";
        else if(str.endsWith("3")) str = str + "rd, ";
        else str = str + "th, ";
    }

    tmp = new SimpleDateFormat("yyyy");
    str = str + tmp.format(date);

    return str;
}

样品

Log.i("myDate", getCustomDateString(new Date()));

2012 年 4 月 25 日

于 2012-04-25T13:59:39.300 回答
2

以下方法可用于获取传递给它的日期的格式化字符串。它会使用 Java 中的 SimpleDateFormat 将日期格式化为 1st、2nd、3rd、4th ..。例如:- 2015 年 9 月 1 日

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("MMMM d'st', yyyy").format(date);
        case 2:  
            return new SimpleDateFormat("MMMM d'nd', yyyy").format(date);
        case 3:  
            return new SimpleDateFormat("MMMM d'rd', yyyy").format(date);
        default: 
            return new SimpleDateFormat("MMMM d'th', yyyy").format(date);
    }
于 2015-09-02T04:09:08.843 回答
1

您可以继承 SimpleDateFormat并覆盖格式,并使用一个简单的实用程序函数,该函数接受一个字符串或整数并返回一个带有“nd”或“st”附加的字符串......类似于:

if (initialDate.equals("2") || initialDate.equals("22"){
    return initialDate += "nd";
}else if {initialDate.equals("3") || initialDate.equals("23"){
    return initialDate += "rd";
}else{
    return initialDate += "th";
}
于 2012-04-25T13:46:25.280 回答
1

对于任何想要使用SimpleDateFormat的干净静态Kotlin版本的人:

class Utils {

    companion object {
        private val dateFormat = SimpleDateFormat("MMM d, yyyy", Locale.getDefault())

       fun formatDate(date: Date): String {
            val oi = getOrdinalIndicator(date)
            return dateFormat.apply {
                applyPattern("MMM d'$oi', yyyy")
            }.format(date)
        }

        private fun getOrdinalIndicator(date: Date): String {
            val day = newCalendar(date).get(Calendar.DAY_OF_MONTH)

            if (day == 11 || day == 12 || day == 13) {
                return "th"
            }

            return when (day % 10) {
                1 -> "st"
                2 -> "nd"
                3 -> "rd"
                else -> "th"
            }
        }

        private fun newCalendar(date: Date): Calendar {
            return Calendar.getInstance().apply {
                time = date
            }
        }
    }
}
于 2018-10-01T09:41:52.787 回答
0

下面的代码可能很有用;

  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  Date date1 = format.parse("2018-06-06");
  String date = format.format(date1);

  if(date.endsWith("01") && !date.endsWith("11"))
    format = new SimpleDateFormat("d'st' MMM, yyyy");

  else if(date.endsWith("02") && !date.endsWith("12"))
    format = new SimpleDateFormat("d'nd' MMM, yyyy");

  else if(date.endsWith("03") && !date.endsWith("13"))
    format = new SimpleDateFormat("d'rd' MMM, yyyy");

  else
    format = new SimpleDateFormat("d'th' MMM, yyyy");

String yourDate = format.format(date1);

您将获得 2018 年 6 月 6 日。

于 2018-06-06T06:00:35.337 回答
0
    public static String getDateText(String day){
      if(day.equalsIgnoreCase("1") || day.equalsIgnoreCase("21") || 
        day.equalsIgnoreCase("31")){
        return "st";
      }else if(day.equalsIgnoreCase("2") || day.equalsIgnoreCase("22")){
        return "nd";
      }else if(day.equalsIgnoreCase("3") || day.equalsIgnoreCase("23")){
        return "rd";
      }else {
        return "th";
      }
    }
于 2018-09-10T12:50:05.047 回答
0

所以这是用kotlin编写的工作代码。

         /**
         * Format the given date like Today, Tomorrow, Yesterday, 11th Nov, 2nd Dec etc.
         */
        fun getFormattedDay(context: Context, strFromDate: String, strFromDateFormat: String) : String
        {
            var formattedDay = ""
            val fromDateFormatter = SimpleDateFormat(strFromDateFormat, Locale.UK)
            val fromDate = fromDateFormatter.parse(strFromDate)

            val tty = getTTYDay(context, strFromDate, strFromDateFormat)
            if (!tty.isEmpty()) {
                return tty
            }

            val dayFormatter = Constants.SIMPLE_DATE_FORMAT_D
            val monthAndYearFormatter = Constants.SIMPLE_DATE_FORMAT_MMM_YYYY

            formattedDay = dayFormatter.format(fromDate)
            val dayOfMonth = formattedDay.toInt()

            if (dayOfMonth in 11..13) {
                formattedDay += "th, "
            }
            else {
                if (formattedDay.endsWith("1")) {
                    formattedDay += "st, "
                }
                else if (formattedDay.endsWith("2")) {
                    formattedDay += "nd, "
                }
                else if (formattedDay.endsWith("3")) {
                    formattedDay += "rd, "
                }
                else {
                    formattedDay += "th, "
                }
            }

            formattedDay += monthAndYearFormatter.format(fromDate)

            return formattedDay
        }

        /**
         * This method returns today, tomorrow or yesterday or else empty string.
         */
        fun getTTYDay(context: Context, strFromDate: String, strFromDateFormat: String) : String
        {
            val fromDateFormatter = SimpleDateFormat(strFromDateFormat, Locale.UK)
            return if (strFromDate == fromDateFormatter.format(Date())) {
                context.getString(R.string.today)
            }
            else if (strFromDate == fromDateFormatter.format(getYesterdayDate())) {
                context.getString(R.string.yesterday)
            }
            else if (strFromDate == fromDateFormatter.format(getTomorrowDate())) {
                context.getString(R.string.tomorrow)
            }
            else {
                ""
            }
        }

        fun getYesterdayDate(): Date {
            val cal = Calendar.getInstance()
            cal.add(Calendar.DATE, -1)
            return cal.time
        }

        fun getTomorrowDate(): Date {
            val cal = Calendar.getInstance()
            cal.add(Calendar.DATE, 1)
            return cal.time
        }

此方法也可以作为静态方法调用。如何使用 ?

像这样调用这个方法

getFormattedDay(上下文!!,“2018 年 11 月 16 日”,“dd/MM/yyyy”)

你会得到如下结果:

今天或明天或昨天或 2018 年 11 月 16 日

希望这对您有所帮助。如果今天不想,明天再删除getTTYDay方法调用。

使用的不同类型的日期格式:

        val DATE_FORMAT_DD_MM_YYYY_1 = "dd/MM/yyyy"
        val DATE_FORMAT_DD_MM_YYYY_2 = "dd MM yyyy"
        val DATE_FORMAT_DD_MMM_YYYY_1 = "dd MMM yyyy"
        val DATE_FORMAT_MMM_YYYY_1 = "MMM yyyy"
        val DATE_FORMAT_D_1 = "d"

        val SIMPLE_DATE_FORMAT_DD_MM_YYYY = SimpleDateFormat(DATE_FORMAT_DD_MM_YYYY_2, Locale.UK)
        val SIMPLE_DATE_FORMAT_DD_MMM_YYYY = SimpleDateFormat(DATE_FORMAT_DD_MMM_YYYY_1, Locale.UK)
        val SIMPLE_DATE_FORMAT_MMM_YYYY = SimpleDateFormat(DATE_FORMAT_MMM_YYYY_1, Locale.UK)
        val SIMPLE_DATE_FORMAT_D = SimpleDateFormat(DATE_FORMAT_D_1, Locale.UK)
于 2018-11-16T05:01:31.787 回答
0

Kotlin 版本 - 更新代码

     fun getFormattedDate(dateStr: String):String{
        try {
            var format = SimpleDateFormat("MM/dd/yyyy")//change your timeformat
            val date1 = format.parse(dateStr)
            var date = format.format(date1)

            if (date.startsWith("1") && !date.startsWith("11"))
                format = SimpleDateFormat("d'st' MMM, yyyy")
            else if (date.startsWith("2") && !date.startsWith("12"))
                format = SimpleDateFormat("d'nd' MMM, yyyy")
            else if (date.startsWith("3") && !date.startsWith("13"))
                format = SimpleDateFormat("d'rd' MMM, yyyy")
            else
                format = SimpleDateFormat("d'th' MMM, yyyy")

            val yourDate = format.format(date1)
            return yourDate
        }
        catch (ex: Exception){
            return dateStr
        }
    }
于 2019-09-18T09:24:52.393 回答