我试图计算给定两次之间的差异,我发现它有一些问题。 假设我们有时间值是“11:AM”和10:00 AM“。 我能够计算,但在上午,下午有一点混乱。 提前致谢
我正在使用以下代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static String timeDiff(String time1, String time2) {
String Time = null;
int difference;
String a1 = time1.substring(6);
String a2 = time2.substring(6);
try {
// Define a date format the same as the expected input
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm a");
// Get time values of the date objects
long l1 = sdf.parse(time1).getTime();
long l2 = sdf.parse(time2).getTime();
difference = (int) (l2 - l1);
difference = (difference < 0 ? -difference : difference) / 60000;
if (difference > 60) {
int Hour = difference / 60;
int Mins = difference % 60;
if (Mins == 0)
Time = Hour + " Hours";
else
Time = Hour + " Hours" + " " + Mins + " Mins";
} else {
Time = difference + " " + "Mins";
}
} catch (ParseException e) {
e.printStackTrace();
}
return Time;
}
public static void main(String[] args) {
String diff = StringToDate.timeDiff("10:00 AM", "01:00 PM");
System.out.println("Difference: " + diff);
}
}
答案 0 :(得分:6)
您可以获取开始和放大的日期对象。时间结束。 然后在millis&amp;减去。
Millis的差异= endDate.getTime() - startDate.getTime()
将差异转换为小时/分钟。
答案 1 :(得分:2)
由于您已经有办法计算差异,如果它们是相同的AM / PM,您只需要将它们转换为24小时制:
if(time.isPM())
//add 12 hours to time
然后进行计算(假设它们在同一天)。这也假设您不仅仅使用Java Calendar类:
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
使用日历,您只需拨打
即可Calendar.getTimeInMillis()
并将它们相互减去。
答案 2 :(得分:1)
对于字符串/日期转换和/或计算,我建议您使用Apache Commons的实用程序:https://commons.apache.org/lang/api-2.6/index.html
始终有用,无需重新发明轮子......
更新:我最近使用了另一个库:JodaTime,这对所有日期操作非常有用。
答案 3 :(得分:1)
只有格式不正确......行
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm a");
应改为
SimpleDateFormat sdf=new SimpleDateFormat("hh:mm a");
之后一切都应该没问题。
答案 4 :(得分:0)
要计算12小时AM / PM格式的两次之间的差异,请尝试:
try {
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss a");
Date d1 = format.parse("11:59:30 PM");
Date d2 = format.parse("12:01:00 AM");
System.out.println("=== Start* :: "+ timeStart);
System.out.println("=== End* :: "+ timerEndOrCurrent);
long difference = d2.getTime() - d1.getTime();
int days = (int) (difference / (1000*60*60*24));
int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60));
long min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
hours = (hours < 0 ? -hours : hours);
long sec = (int) (difference / 1000) % (60);
System.out.println("=== hours :: "+ hours);
System.out.println("=== min :: "+ ( min < 0 ? ((min-1)+60) : min));
System.out.println("=== sec :: "+ ( sec < 0 ? -sec : sec));
System.out.println("");
} catch (ParseException e1) {
e1.printStackTrace();
}