java 日历之间的差异
java difference between calendars
我只是在做两个不同日历的两个时间毫秒的简单差异。
示例:
Calendar ini = Calendar.getInstance();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {e.printStackTrace();}
Calendar end = Calendar.getInstance();
long diff = end.getTimeInMillis()-ini.getTimeInMillis();
System.out.println("diff "+diff);
System.out.println("ini date "+ ini.getTime());
System.out.println("end date "+ end.getTime());
System.out.println("diff time format "+timeFormat.format(diff));
时间格式为:
private final static String TIME_STRING_FORMAT = "hh:mm:ss.SSS";
private static SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_STRING_FORMAT);
而且在输出中,总是出现1个我们的差异,是不是SimpleDateFormat的问题???
输出:
diff 1500
ini date Sun May 24 22:27:01 CEST 2015
end date Sun May 24 22:27:03 CEST 2015
diff time format 01:00:01.500
感谢您的帮助!!
1 小时的差异是由您当地的时区造成的。 Date(long)
在格林威治标准时间 1970 年 1 月 1 日之后构造一个毫秒数的日期。在欧洲大陆(冬季)纪元后 1500 毫秒因此是 1 月 1 日 01:00:01.500.
如果您使用 Java 8,请参阅 Period
and Duration
上的教程。 Duration
可能是您要使用的。
看起来 SimpleDateFormat
使用了时区。参见 this related question。因此,当您给它 1500 毫秒的时间时,它认为您给它的时间是格林威治标准时间纪元开始以来的时间。然后它将其转换为您的时区,为您提供几个小时的偏移量。您可能希望将 timeFormat 上的时区设置为 GMT。试试这个:
Calendar ini = Calendar.getInstance();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {e.printStackTrace();}
Calendar end = Calendar.getInstance();
long diff = end.getTimeInMillis()-ini.getTimeInMillis();
System.out.println("diff "+diff);
System.out.println("ini date "+ ini.getTime());
System.out.println("end date "+ end.getTime());
Date date = new Date(diff);
System.out.println(date);
timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("diff time format "+timeFormat.format(date));
我只是在做两个不同日历的两个时间毫秒的简单差异。
示例:
Calendar ini = Calendar.getInstance();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {e.printStackTrace();}
Calendar end = Calendar.getInstance();
long diff = end.getTimeInMillis()-ini.getTimeInMillis();
System.out.println("diff "+diff);
System.out.println("ini date "+ ini.getTime());
System.out.println("end date "+ end.getTime());
System.out.println("diff time format "+timeFormat.format(diff));
时间格式为:
private final static String TIME_STRING_FORMAT = "hh:mm:ss.SSS";
private static SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_STRING_FORMAT);
而且在输出中,总是出现1个我们的差异,是不是SimpleDateFormat的问题???
输出:
diff 1500
ini date Sun May 24 22:27:01 CEST 2015
end date Sun May 24 22:27:03 CEST 2015
diff time format 01:00:01.500
感谢您的帮助!!
1 小时的差异是由您当地的时区造成的。 Date(long)
在格林威治标准时间 1970 年 1 月 1 日之后构造一个毫秒数的日期。在欧洲大陆(冬季)纪元后 1500 毫秒因此是 1 月 1 日 01:00:01.500.
如果您使用 Java 8,请参阅 Period
and Duration
上的教程。 Duration
可能是您要使用的。
看起来 SimpleDateFormat
使用了时区。参见 this related question。因此,当您给它 1500 毫秒的时间时,它认为您给它的时间是格林威治标准时间纪元开始以来的时间。然后它将其转换为您的时区,为您提供几个小时的偏移量。您可能希望将 timeFormat 上的时区设置为 GMT。试试这个:
Calendar ini = Calendar.getInstance();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {e.printStackTrace();}
Calendar end = Calendar.getInstance();
long diff = end.getTimeInMillis()-ini.getTimeInMillis();
System.out.println("diff "+diff);
System.out.println("ini date "+ ini.getTime());
System.out.println("end date "+ end.getTime());
Date date = new Date(diff);
System.out.println(date);
timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("diff time format "+timeFormat.format(date));