Java 将th添加到最新格式,并以时间格式提供上午/下午

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

date 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);

不,没有这样的格式。如您所见,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,所有这些都来自。不是通过代码。