日期API中是否有任何特定格式,可以在特定日期之后打印st,nd,rd和th。假设12月26日应为12月26日。
时间上的任何特定格式(例如上午10.30)也应完全相同。
只需内置模式即可解决此问题。
我为场景编写了以下代码,但未获得任何期望的输出
//Checking date format
String pattern = "EEE, MMM.dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);
//checking time format
DateFormat dateFormat2 = new SimpleDateFormat("hh.mm aa.");
String dateString2 = dateFormat2.format(new Date()).toString();
System.out.println(dateString2);
答案 0 :(得分:2)
否,没有这样的格式。如您所见in the documentation,SimpleDateFormat
的日期和时间模式没有提供26th
之类的东西。
答案 1 :(得分:1)
第一个问题的解决方案:
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());
第二个问题的解决方案:
public static String getTimeFromHours(long time) {
int min = (int) (time / 60);
int hours = min / 60;
int remaining_min = min % 60;
if (hours > 12) {
return String.format(Locale.ENGLISH, "%02d:%02d %s", hours - 12, remaining_min, "PM");
} else if (hours < 12) {
return String.format(Locale.ENGLISH, "%02d:%02d %s", hours, remaining_min, "AM");
} else {
return String.format(Locale.ENGLISH, "%02d:%02d %s", hours, remaining_min, "PM");
}
}
尝试一下,它应该适合您。
答案 2 :(得分:0)
我建议使用java.time
。您可以通过将自定义映射传递到DateTimeFormatterBuilder()
方法来使用appendText()
构建自定义格式器。
LocalTime
的上午/下午示例:
LocalTime localTime = LocalTime.now();
Map<Long, String> map = new HashMap<>();
map.put(0L, "a.m");
map.put(1L, "p.m");
DateTimeFormatter aMpM_formatter = new DateTimeFormatterBuilder()
.appendPattern("hh:mm:ss ")
.appendText(ChronoField.AMPM_OF_DAY, map) // without your custom map 0 is mapped to AM and 1 is mapped to PM
.toFormatter();
System.out.println(localTime.format(aMpM_formatter));
带有后缀的LocalDate
的示例:
LocalDate localDate = LocalDate.now();
Map<Long, String> daysWithSuffix = new HashMap<>(); // map values
daysWithSuffix.put(1L, "1st");
daysWithSuffix.put(2L, "2nd");
daysWithSuffix.put(3L, "3rd");
daysWithSuffix.put(21L, "21st");
daysWithSuffix.put(22L, "22nd");
daysWithSuffix.put(23L, "23rd");
daysWithSuffix.put(31L, "31st");
for (long d = 1; d <= 31; d++) {
daysWithSuffix.putIfAbsent(d, d + "th");
}
DateTimeFormatter thFormatter = new DateTimeFormatterBuilder()
.appendPattern("EEE, MMM ")
.appendText(ChronoField.DAY_OF_MONTH, daysWithSuffix) // mapped values from your custom map
.toFormatter();
System.out.println(localDate.format(thFormatter));
System.out.println(LocalDate.of(2019, Month.MARCH, 1).format(thFormatter));
System.out.println(LocalDate.of(2019, Month.MARCH, 23).format(thFormatter));
LocalDateTime
的示例,其日期后缀为序数并自定义上午/下午:
DateTimeFormatter both = new DateTimeFormatterBuilder()
.appendPattern("EEE, MMM ")
.appendText(ChronoField.DAY_OF_MONTH, daysWithSuffix)
.appendLiteral(" ")
.appendPattern("hh:mm:ss ")
.appendText(ChronoField.AMPM_OF_DAY, map)
.toFormatter();
System.out.println(LocalDateTime.now().format(both));