Java 将th添加到最新格式,并以时间格式提供上午/下午
date API中是否有任何特定格式可以在特定日期后打印st、nd、rd和th。假设12月26日应该是12月26日 此外,任何特定的时间格式,如上午10:30。格式应完全相同 仅需要内置模式即可解决此问题 我已经为场景编写了以下代码,但没有得到任何期望的输出Java 将th添加到最新格式,并以时间格式提供上午/下午,java,Java,date API中是否有任何特定格式可以在特定日期后打印st、nd、rd和th。假设12月26日应该是12月26日 此外,任何特定的时间格式,如上午10:30。格式应完全相同 仅需要内置模式即可解决此问题 我已经为场景编写了以下代码,但没有得到任何期望的输出 //Checking date format String pattern = "EEE, MMM.dd"; SimpleDateFormat simpleDateFormat = new SimpleDateFor
//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);
不,没有这样的格式。如您所见,SimpleDataFormat的日期和时间模式不提供类似于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());
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");
}
}
第二个问题的解决方案:
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");
}
}
试试这个,它会对你很好。我建议使用java.time。通过将自定义映射传递给appendText方法,可以使用DateTimeFormatterBuilder构建自定义格式化程序
本地时间的am/pm示例:
LocalDateTime的示例,带有日期和自定义am/pm的顺序后缀:
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));
请参阅您的第一期。我不明白你在问关于AM/PM的问题,而我们正在讨论这个主题——你不应该使用SimpleDateFormat、Date和Calendar类。使用java.time包中的类@JoakimDanielson的时间应该显示为上午10:30,而不是上午10:30。有什么内在的模式可以解决这个问题吗。我不是通过代码操作来提问。你真的应该一次问一个问题,但答案是,没有内置的对st、rd、th的支持,也没有内置的对am/PMI自定义变体的支持。我建议你不要使用SimpleDataFormat和Date。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。取而代之的是使用LocalDate、LocalTime和DateTimeFormatter,所有这些都来自。不是通过代码。