java.util.Calendar 格式 mm/dd/yyyy 和 hh:mm:ss

java.util.Calendar format mm/dd/yyyy and hh:mm:ss

对于我的 java 程序,我导入了日历 class 并创建了一个名为 cal 的 getInstance()。下面的代码在它自己的方法中 class.

import java.util.Calendar;
Calendar cal = Calendar.getInstance();

我正在尝试添加到字符串覆盖范围,这将等于下面的代码。

coverage = String.format("%nPAYOUT FOR EARTHQUAKE DAMAGE"
                           + "%n%SHomeowner:  " + insured
                           + "%nDate:  " + cal.get(Calendar.DATE)
                           + "%nTime:  " + cal.get(Calendar.HOUR));

这 returns 只有当前的日期和时间。我怎样才能把它变成 returns 格式

日期:mm/dd/yyyy

时间:hh:mm:ss

java.time

您使用的是多年前被现代 java.time classes 定义的可怕的 date-time class在 JSR 310 中。

捕捉时区中的当前时刻。

ZonedDateTime zdt = ZonedDateTime.now() ;  // Uses JVM’s current default time zone.

或者,明确指定时区。

ZoneId z = ZoneId.of( "America/Edmonton" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

在 Java 15+ 中,我们有 text blocks feature to make your text creation easier. Text blocks do not support interpolation directly. Use String#format/String#formatted.

String insured = "Bob";
String template =
        """
        PAYOUT FOR EARTHQUAKE DAMAGE
        Homeowner: %1$s
        Date: %2$s
        Time: %3$s
        """;
String coverage =
        template.formatted(
                insured ,
                zdt.format(
                        DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( Locale.US )
                ) ,
                zdt.format(
                        DateTimeFormatter.ofLocalizedTime( FormatStyle.MEDIUM ).withLocale( Locale.US )
                )
        );

System.out.println( "coverage = " + "\n" + coverage );

当运行.

coverage = 
PAYOUT FOR EARTHQUAKE DAMAGE
Homeowner: Bob
Date: Feb 27, 2022
Time: 3:20:32 PM

与遗留代码互操作

如果一定要使用Calendarclass与尚未更新到java.time的旧代码进行互操作,可以来回转换.使用添加到旧 classes 的新转换方法。

从传统到现代的转变。转换为 GregorianCalendar。使用 instanceof 测试是否有可能出现不同的具体 class.

ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;

从现代到传统。

Calendar cal = GregorianCalendar.from( zdt ) ;

如果使用 Calendar 从教科书或教程开始工作,您需要更新的教科书或教程。