Android 将日期时间转换为“时间”;2012年4月6日“;格式
我想在日期字符串的“6th 7th..etc.”中获取日期 我试过了,也试过了。我不需要字符串 有什么解决方法吗?您可以对格式进行子类化和重写,并使用一个简单的实用程序函数,该函数接收字符串或整数,并返回附加了“nd”或“st”的字符串……类似于:Android 将日期时间转换为“时间”;2012年4月6日“;格式,android,Android,我想在日期字符串的“6th 7th..etc.”中获取日期 我试过了,也试过了。我不需要字符串 有什么解决方法吗?您可以对格式进行子类化和重写,并使用一个简单的实用程序函数,该函数接收字符串或整数,并返回附加了“nd”或“st”的字符串……类似于: if (initialDate.equals("2") || initialDate.equals("22"){ return initialDate += "nd"; }else if {initialDate.equals("3") ||
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";
}
试试这个,
这看起来像是静态的,但工作正常…给你:
/**
* 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;
}
2012年4月25日
可以使用以下方法获取传递给它的日期的格式化字符串。它会将日期格式化为1、2、3、4。。在Java中使用SimpleDataFormat。例如: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 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日”,“年/月/日”)
您将得到如下结果:
今天或明天或昨天或2018年11月16日
希望这对你有帮助。如果您不想要今天,那么明天就删除gettyday
方法调用
使用不同类型的日期格式:
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
}
}
使用Format()方法创建您自己的SimpleDataForter部分将通过一些逻辑实现,
'st',nd',th'
部分,因为没有任何日期修饰符自动处理它,就像在可能重复的3nd中给出的答案一样?可能需要解决:)第一,第二,第三,第四。。第五。。第六。。第七。。第八。。第九。。第十。。我也需要@瓦卡斯“th”真的!:)提示:最好创建一个静态方法,将Date
对象作为参数,然后执行其中的所有逻辑,只返回所需的字符串格式,然后由我确认+1:)我没有时间处理我的,我正在跳槽并投票给BB专家。:)嘿,12号怎么样?或者第13条?它在第2条和第3条结束,所以它是有效的。根据第1条、第11条、第21条、第41条(州等),这不是准确的答案@waqaslam代码工作正常。@请尽可能避免。你也可以张贴更好的答案,然后我,如果你有。堆栈溢出对所有人都是开放的。提问者会接受你的回答,如果他/她同意的话。
/**
* 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
}
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)
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
}
}