定义日期格式 java 'rd' 'st' 'th' 'nd'
define the date format java 'rd' 'st' 'th' 'nd'
我有一个字符串 "Saturday, Oct, 25th, 11:40"
这个日期是什么格式?我如何解析 ordinal indicator?
这是我想要转换的方式
private String changeDateFormat(String stringDate){
DateFormat dateFormat = new SimpleDateFormat("DD, MM, ddth, hh:mm");
try {
Date date = dateFormat.parse(stringDate);
dateFormat = new SimpleDateFormat("ddMMMyyyy");
stringDate=dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return stringDate.toUpperCase();
}
java 文档有很多关于如何从不同格式的字符串解析日期的信息:
你可以试试这个,但要解决这个问题并参考 java 文档,直到你能够解决你的问题:
DateFormat dateFormat = new SimpleDateFormat("E, MMM, dd'th' HH:mm");
Date date = dateFormat.parse("Saturday, Oct, 25th, 11:40");
尝试不同的组合,这样您将更多地了解 SimpleDateFormat 以及它如何处理不同的格式。
希望这个程序能解决您的问题。
public class Test
{
public static void main(String[] args) {
System.out.println(new Test().getCurrentDateInSpecificFormat(Calendar.getInstance()));
}
private String getCurrentDateInSpecificFormat(Calendar currentCalDate) {
String dayNumberSuffix = getDayNumberSuffix(currentCalDate.get(Calendar.DAY_OF_MONTH));
DateFormat dateFormat = new SimpleDateFormat("E, MMM, dd'"+ dayNumberSuffix +"', HH:mm");
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";
}
}
}
SimpleDateFormat
似乎不容易处理天数后跟 "st" "th" 等。一个简单的解决方案是删除原始字符串的那部分。例如
int comma = original.lastIndexOf(',');
String stringDate =
original.substring(0, comma - 2) +
original.substring(comma + 1);
之后只需在 stringDate
上使用此格式:
SimpleDateFormat("EE, MM, dd, hh:mm")
一种解决方案是解析参数以了解要使用的模式:
private String changeDateFormat(String stringDate) {
DateFormat dateFormat;
if (stringDate.matches("^([a-zA-Z]+, ){2}[0-9]+st, [0-9]{2}:[0-9]+{2}")) {
dateFormat = new SimpleDateFormat("E, MMM, dd'st', HH:mm");
} else if (stringDate.matches("^([a-zA-Z]+, ){2}[0-9]+nd, [0-9]{2}:[0-9]+{2}")) {
dateFormat = new SimpleDateFormat("E, MMM, dd'nd', HH:mm");
} else if (stringDate.matches("^([a-zA-Z]+, ){2}[0-9]+rd, [0-9]{2}:[0-9]+{2}")) {
dateFormat = new SimpleDateFormat("E, MMM, dd'rd', HH:mm");
} else {
dateFormat = new SimpleDateFormat("E, MMM, dd'th', HH:mm");
}
try {
Date date = dateFormat.parse(stringDate);
dateFormat = new SimpleDateFormat("ddMMMyyyy");
stringDate = dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return stringDate.toUpperCase();
}
这可能需要一些优化,但它给出了思路。
我有一个字符串 "Saturday, Oct, 25th, 11:40"
这个日期是什么格式?我如何解析 ordinal indicator?
这是我想要转换的方式
private String changeDateFormat(String stringDate){
DateFormat dateFormat = new SimpleDateFormat("DD, MM, ddth, hh:mm");
try {
Date date = dateFormat.parse(stringDate);
dateFormat = new SimpleDateFormat("ddMMMyyyy");
stringDate=dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return stringDate.toUpperCase();
}
java 文档有很多关于如何从不同格式的字符串解析日期的信息:
你可以试试这个,但要解决这个问题并参考 java 文档,直到你能够解决你的问题:
DateFormat dateFormat = new SimpleDateFormat("E, MMM, dd'th' HH:mm");
Date date = dateFormat.parse("Saturday, Oct, 25th, 11:40");
尝试不同的组合,这样您将更多地了解 SimpleDateFormat 以及它如何处理不同的格式。
希望这个程序能解决您的问题。
public class Test
{
public static void main(String[] args) {
System.out.println(new Test().getCurrentDateInSpecificFormat(Calendar.getInstance()));
}
private String getCurrentDateInSpecificFormat(Calendar currentCalDate) {
String dayNumberSuffix = getDayNumberSuffix(currentCalDate.get(Calendar.DAY_OF_MONTH));
DateFormat dateFormat = new SimpleDateFormat("E, MMM, dd'"+ dayNumberSuffix +"', HH:mm");
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";
}
}
}
SimpleDateFormat
似乎不容易处理天数后跟 "st" "th" 等。一个简单的解决方案是删除原始字符串的那部分。例如
int comma = original.lastIndexOf(',');
String stringDate =
original.substring(0, comma - 2) +
original.substring(comma + 1);
之后只需在 stringDate
上使用此格式:
SimpleDateFormat("EE, MM, dd, hh:mm")
一种解决方案是解析参数以了解要使用的模式:
private String changeDateFormat(String stringDate) {
DateFormat dateFormat;
if (stringDate.matches("^([a-zA-Z]+, ){2}[0-9]+st, [0-9]{2}:[0-9]+{2}")) {
dateFormat = new SimpleDateFormat("E, MMM, dd'st', HH:mm");
} else if (stringDate.matches("^([a-zA-Z]+, ){2}[0-9]+nd, [0-9]{2}:[0-9]+{2}")) {
dateFormat = new SimpleDateFormat("E, MMM, dd'nd', HH:mm");
} else if (stringDate.matches("^([a-zA-Z]+, ){2}[0-9]+rd, [0-9]{2}:[0-9]+{2}")) {
dateFormat = new SimpleDateFormat("E, MMM, dd'rd', HH:mm");
} else {
dateFormat = new SimpleDateFormat("E, MMM, dd'th', HH:mm");
}
try {
Date date = dateFormat.parse(stringDate);
dateFormat = new SimpleDateFormat("ddMMMyyyy");
stringDate = dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return stringDate.toUpperCase();
}
这可能需要一些优化,但它给出了思路。