如何在日期对象 JAVA 中将 'AM' 更改为 'PM'

How do I change 'AM' to 'PM' in a Date Object JAVA

我正在尝试使用 Date 对象并计算 android 应用程序的时差。但是当时间在“12:00”时我遇到了一个问题。我的意思是当我将日期输入为 12:12:00 Java AM/PM 格式化程序 returns 12:12:00AM 但它应该是 12:12:00PM.

我找不到任何解决方法。

Date date = new Date(); 
String stringDate = "2019-09-13 12:12:00";  
SimpleDateFormat formatter6=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
Date date6 = formatter6.parse(stringDate);   
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");
System.out.println(sdf.format(date6));

它returns 12:12:00上午 但正确计算应该是 12:12:00 下午

两种解决方案,

1.

Date date = new Date(); 
String stringDate = "2019-09-13 12:12:00 PM";  
SimpleDateFormat formatter6=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");

2.

Date date = new Date(); 
String stringDate = "2019-09-13 12:12:00";  
SimpleDateFormat formatter6=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

通过AM/PM的时间

Date date = new Date();
String stringDate = "2019-09-13 12:12:00 PM";
SimpleDateFormat formatter6 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
Date date6 = formatter6.parse(stringDate);
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");
System.out.println(sdf.format(date6));

使用DateTimeFormatterLocalDateTime

String stringDate = "2019-09-13 12:12:00";  
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime date = LocalDateTime.parse(stringDate, formatter);
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("hh:mm:ss a");
System.out.println(formatter2.format(date));

您可能还想根据居住地为第二个格式化程序设置区域设置。

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("hh:mm:ss a", Locale.US);
System.out.println(formatter2.format(date));

12:12:00 PM

在线:

SimpleDateFormat formatter6=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

hh 确保小时被解析为 AM/PM 值 b/w 1-12。要获得所需的结果,您可以使用 HH 标记来解析 0-23 之间的小时值。所以,代码应该是:

SimpleDateFormat formatter6=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

如果您使用的是 java 8 或更高版本,那么您绝对应该使用 LocalDateTime 并且 DateTimeFormatter 可以更轻松地处理日期时间。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a");
String am = LocalDateTime.now().format(formatter);
String pm = LocalDateTime.now().plusHours(2).format(formatter);
System.out.println(am);
System.out.println(pm);

现在我假设我 运行 这段代码在它变为下午前 2 个小时的上午你也可以尝试 @Joakim Danielson 答案,它不应该依赖于它是什么时候 运行.

查看 LocalDateTime and DateTimeFormatter

的文档

尝试使用现代方式,即使用 java.time:

String stringDate = "2019-09-13 12:12:00";  
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");  
LocalDateTime datetime = LocalDateTime.parse(stringDate, dtf); 
DateTimeFormatter dtfA = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a");
System.out.println(datetime.format(dtfA));
// receive the time part and format it
LocalTime timePart = datetime.toLocalTime();
DateTimeFormatter tf = DateTimeFormatter.ofPattern("hh:mm:ss a");
System.out.println(timePart.format(tf));

这输出

2019-09-13 12:12:00 PM
12:12:00 PM

在我的系统上。

Note that your pattern String used for parsing is wrong since you are not using capital "H" for the hours of day, but "h" instead. That will definitely not work (correctly).