我正在尝试使用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
答案 0 :(得分:2)
使用DateTimeFormatter
和LocalDateTime
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或更高版本,则一定要使用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);
现在,我假设我在更改为pm之前2个小时的凌晨时间运行此代码,您还可以尝试@Joakim Danielson
答案,该答案不取决于运行时间。