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
与遗留代码互操作
如果一定要使用Calendar
class与尚未更新到java.time的旧代码进行互操作,可以来回转换.使用添加到旧 classes 的新转换方法。
从传统到现代的转变。转换为 GregorianCalendar
。使用 instanceof
测试是否有可能出现不同的具体 class.
ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;
从现代到传统。
Calendar cal = GregorianCalendar.from( zdt ) ;
如果使用 Calendar
从教科书或教程开始工作,您需要更新的教科书或教程。
对于我的 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
与遗留代码互操作
如果一定要使用Calendar
class与尚未更新到java.time的旧代码进行互操作,可以来回转换.使用添加到旧 classes 的新转换方法。
从传统到现代的转变。转换为 GregorianCalendar
。使用 instanceof
测试是否有可能出现不同的具体 class.
ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;
从现代到传统。
Calendar cal = GregorianCalendar.from( zdt ) ;
如果使用 Calendar
从教科书或教程开始工作,您需要更新的教科书或教程。