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

时间:2019-09-13 08:42:30

标签: java datetime-format datetime-parsing

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

我找不到解决方法。

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

它返回12:12:00 AM 正确的计算应该是下午12:12:00

6 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:2)

在线:

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

hh确保将小时数解析为AM / PM值,黑白1-12。为了获得理想的结果,您可以使用HH标记来解析0-23之间的小时值。因此,代码应为:

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

答案 2 :(得分:1)

尝试以现代方式使用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

在我的系统上。

  

请注意,您用于解析的模式String是错误的,因为您一天中的时段并非使用大写字母"H",而是使用"h"。绝对不能(正确)

答案 3 :(得分:0)

两种解决方案,

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

答案 4 :(得分:0)

及时输入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));

答案 5 :(得分:0)

如果您使用的是Java 8或更高版本,则一定要使用LocalDateTimeDateTimeFormatter,以便更轻松地处理日期时间。

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

现在,我假设我在更改为pm之前2个小时的凌晨时间运行此代码,您还可以尝试@Joakim Danielson答案,该答案不取决于运行时间。

查看LocalDateTimeDateTimeFormatter的文档