我想在“6th 7th..等”度过这一天。日期字符串。
我已经尝试过SimpleDateFormater并且也尝试过DateFormatSymbols。我没有得到必需的字符串。
有什么解决方法吗?
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());
试试这个,这看起来像一些静态的,但工作正常......
干得好:
/**
* 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 日
以下方法可用于获取传递给它的日期的格式化字符串。它会使用 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);
}
您可以继承 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";
}
对于任何想要使用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
}
}
}
}
下面的代码可能很有用;
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 日。
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";
}
}
所以这是用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)
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
}
}