JAVA-日期间隔时间,错误的结果
你好, 我对减去两个日期有问题,因为结果不正确:JAVA-日期间隔时间,错误的结果,java,date,time,Java,Date,Time,你好, 我对减去两个日期有问题,因为结果不正确: public static void main(String[] args) throws ParseException, InterruptedException{ DateFormat format = new SimpleDateFormat("HH:mm:ss"); long start = System.currentTimeMillis(); Thread.sleep(3000); long goal = Sy
public static void main(String[] args) throws ParseException, InterruptedException{
DateFormat format = new SimpleDateFormat("HH:mm:ss");
long start = System.currentTimeMillis();
Thread.sleep(3000);
long goal = System.currentTimeMillis();
long wyn = goal - start;
Date result = new Date(wyn);
System.out.println("Test1: " + format.format(result));
}
结果:
测试1:01:00:03
启动和停止之间应该只有三秒钟-为什么有一小时?取决于夏季/冬季时间?
我需要计算程序开始和结束之间的时间,我只想得到小时、分和秒。有人能帮忙吗?您正在将间隔转换为日期对象。这是错误的 日期对象用于表示时间点,而不是时间间隔 您应该做以下几点:
long wyn = goal - start;
System.out.println("Test1: " + wyn); //prints the interval in milliseconds
结果:
Test1: 3000
如果使用wyn构造日期对象,则创建的日期对象表示纪元1970年1月1日00:00:00 GMT后3秒的时间点
你之所以看到小时是因为1970年使用的时区与现在使用的时区不同。出于同样的原因,我得到Test1:07:30:03。您正在将间隔转换为日期对象。这是错误的 日期对象用于表示时间点,而不是时间间隔 您应该做以下几点:
long wyn = goal - start;
System.out.println("Test1: " + wyn); //prints the interval in milliseconds
结果:
Test1: 3000
如果使用wyn构造日期对象,则创建的日期对象表示纪元1970年1月1日00:00:00 GMT后3秒的时间点
你之所以看到小时是因为1970年使用的时区与现在使用的时区不同。出于同样的原因,我得到了Test1:07:30:03。日期类不适用于间隔。它是指特定的时间点。以下
long wyn = goal - start;
将相当于3000左右。当用作日期构造函数的参数时,是3000毫秒之后。根据您的时区,这将是一些小时数+3秒
考虑使用API,该API具有一个可用于计算间隔的间隔接口。日期类不适用于间隔。它是指特定的时间点。以下
long wyn = goal - start;
将相当于3000左右。当用作日期构造函数的参数时,是3000毫秒之后。根据您的时区,这将是一些小时数+3秒
考虑使用API,该API具有一个可用于计算间隔的间隔接口。要获得所需的格式,而不误用日期类,请执行以下操作:
public static String toHMS(int milliseconds){
DecimalFormat twoDigit = new DecimalFormat("00");
int secs = milliseconds/1000;
String secsString = twoDigit.format(secs%60);
int minutes = secs/60;
String minsString = twoDigit.format(minutes%60);
int hours = minutes/60;
String hoursString = twoDigit.format(hours);
return hoursString + ":" + minsString + ":" + secsString;
}
要获取所需格式,而不误用Date类,请执行以下操作:
public static String toHMS(int milliseconds){
DecimalFormat twoDigit = new DecimalFormat("00");
int secs = milliseconds/1000;
String secsString = twoDigit.format(secs%60);
int minutes = secs/60;
String minsString = twoDigit.format(minutes%60);
int hours = minutes/60;
String hoursString = twoDigit.format(hours);
return hoursString + ":" + minsString + ":" + secsString;
}
答案是正确的
滚动您自己的日期时间计算是一项冒险的业务。时区、DST,并使此类尝试容易失败
而且,滚动您自己的代码是愚蠢的,因为我们已经编写好并调试好了代码。目前,我们有Joda Time库,在Java8中,我们将有新的Java.Time.*类,这些类的灵感来自Joda Time。Joda Time的课程只是为了满足你的需要而建立的,你需要处理一段时间
下面是从我最近发布的一个类似问题的答案复制而来的,展示了如何正确定义时间跨度并呈现一个描述该跨度的字符串
2.3库使这类工作更容易。请看课程表和课程
与java.util.Date不同,在Joda Time中,DateTime实例确实知道其分配的时区
该标准定义了一种以PnYnMnDTnHnMnS格式描述小时、分钟等的方式。我在下面的示例代码中使用了它。Joda Time也提供了其他方式
//©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
//导入org.joda.time.format.*;
DateTimeZone timeZone=DateTimeZone.forID欧洲/伦敦;
DateTime dateTimeNew=新的DateTime时区;
DateTime dateTimeOld=dateTimeNew.2小时;
期间=新期间dateTimeOld,dateTimeNew;
转储到控制台
System.out.println dateTimeNew:+dateTimeNew;
System.out.println dateTimeOld:+dateTimeOld;
System.out.println期间:+期间;
当运行时
dateTimeNew:2014-01-02T23:19:45.021Z
日期时间:2014-01-02T21:19:45.021Z
期间:PT2H
答案是正确的
滚动您自己的日期时间计算是一项冒险的业务。时区、DST,并使此类尝试容易失败
而且,滚动您自己的代码是愚蠢的,因为我们已经编写好并调试好了代码。目前,我们有Joda Time库,在Java8中,我们将有新的Java.Time.*类,这些类的灵感来自Joda Time。Joda Time的课程只是为了满足你的需要而建立的,你需要处理一段时间
下面是从我最近发布的一个类似问题的答案复制而来的,展示了如何正确定义时间跨度并呈现一个描述该跨度的字符串
2.3库使这类工作更容易。请看课程表和课程
与java.util.Date不同,在Joda Time中,DateTime实例确实知道其分配的时区
该标准定义了一种方法t
o以PnYnMnDTnHnMnS格式描述为小时、分钟等。我在下面的示例代码中使用了它。Joda Time也提供了其他方式
//©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
//导入org.joda.time.format.*;
DateTimeZone timeZone=DateTimeZone.forID欧洲/伦敦;
DateTime dateTimeNew=新的DateTime时区;
DateTime dateTimeOld=dateTimeNew.2小时;
期间=新期间dateTimeOld,dateTimeNew;
转储到控制台
System.out.println dateTimeNew:+dateTimeNew;
System.out.println dateTimeOld:+dateTimeOld;
System.out.println期间:+期间;
当运行时
dateTimeNew:2014-01-02T23:19:45.021Z
日期时间:2014-01-02T21:19:45.021Z
期间:PT2H
为了正确性,请注意:它不是Linux时代。为了正确性,请注意:它不是Linux时代。