我有一个计算时间间隔的程序。当我输入timeTo与PM的时间时,它变为AM(当我调试它时)。 这是代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Scanner sc = new Scanner(System.in);
System.out.print("Enter date: "); //ex: input 2016-02-16
String dateFrom = sc.nextLine();
System.out.print("Enter time from: "); //ex input: 09:00 AM
String timeFrom = sc.nextLine();
System.out.print("Enter time to: "); //ex input: 05:00 PM
String timeTo = sc.nextLine();
String substring = timeTo.substring(Math.max(timeTo.length() - 2, 0));
String substring1 = timeFrom.substring(Math.max(timeFrom.length() - 2, 0));
Calendar c = Calendar.getInstance();
try {
c.setTime(dateformat.parse(dateFrom));
} catch (Exception e) {
}
if ("AM".equals(substring) && "AM".equals(substring1)) {
c.add(Calendar.DATE, 1);
} else if ("AM".equals(substring)) {
c.add(Calendar.DATE, 1);
}
Date date1 = c.getTime();
dateTo = dateformat.format(date1);
Date d1 = new Date();
Date d2 = new Date();
try {
d1 = format.parse(dateFrom + " " + timeFrom);
d2 = format.parse(dateTo + " " + timeTo); // instead of 2016-02-16 05:00:00 PM
// it becomes 2016-02-16 05:00:00 AM
} catch (Exception e) {
}
long diffMin = (d2.getTime() - d1.getTime()) / (60 * 1000) % 60;
long diffHour = (d2.getTime() - d1.getTime()) / (60 * 60 * 1000) % 24;
double d = (double) diffMin;
double d3 = (double) diffHour; // -4.0 because 05:00 AM - 09:00 AM
与上面的示例一样,timeFrom的输入值为09:00 AM,timeTo为05:00 PM,传递给d2时为05:00 AM。
答案 0 :(得分:1)
您使用的是错误的日期格式字符串。 HH
是"一天中的小时"在24小时格式,即0-23,没有关于AM / PM那里(所以任何< 12将是AM)。
您必须使用hh
12小时格式(假设您需要1-12小时,0-11使用kk
)。您还必须明确添加AM / PM标记。所以你最终应该
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
查看java.text.SimpleDateFormat
的API文档,它解释了format-string中的所有可能元素。