我有测试开始时间(例如9:05:30)和测试应该运行的总持续时间(比如5000秒)。如何计算从开始时间到结束时间的结束时间?
答案 0 :(得分:2)
如果您正在使用Java 8时间API中的Instant
,ZonedDateTime
或LocalDateTime
,则可以使用plusSeconds
:
Instant startTime = ...
Instant endTime = startTime.plusSeconds(5000);
如果您正在使用Date
(哦,恐怖......),您只需使用getTime
:
Date startTime = ...
Date endTime = new Date(startTime.getTime() + TimeUnit.SECONDS.toMillis(5000));
答案 1 :(得分:0)
在javascipt中你可以做到
console.time('testSomeCall');
//code here
console.timeEnd('testSomeCall');
在其他语言中,通常你会在测试之前获得时间或时间戳,然后在结束之后获得结束 - 初始化,就像这样对于java
long timeInit = System.currentTimeMillis();
//some code here
long timeEnd = System.currentTimeMillis();
System.out.println("Ttotal time: " + (timeEnd - timeInit));
答案 2 :(得分:0)
String myTime = "9:05:20";
// before calculation
Date tempStartTime = new SimpleDateFormat("HH:mm:ss").parse(myTime);
int hours = tempStartTime.getHours();
int minutes = tempStartTime.getMinutes();
int seconds = tempStartTime.getSeconds();
int elapsedSeconds = 5000;
// add seconds
int totalSeconds = seconds + elapsedSeconds;
// after calculation
Date tempEndTime = new SimpleDateFormat("HH:mm:ss").parse(hours + ":" + minutes + ":" + totalSeconds);
hours = tempEndTime.getHours();
minutes = tempEndTime.getMinutes();
seconds = tempEndTime.getSeconds();
System.out.println(hours + ":" + minutes + ":" + seconds);
// Output is 10:28:40
如何将09:05:5020解析为日期?
该值成功解析为5020秒,在每60秒后简单地滚动到下一分钟以适应Out-Of-Bounds值。如果要阻止这种情况,请在解析前调用setLenient(false);
对象{默认情况下leniency为真。)
答案 3 :(得分:0)
使用java.time而不是旧的日期时间类Answer by Andy Turner是正确的。这是更具体的细节。
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
Instant
如果只是以编程方式从现在开始获得5,000秒,请使用特纳答案中显示的Instant
对象。 Instant
是UTC中时间轴上的一个时刻,分辨率高达纳秒。
Instant later = Instant.now().plusSeconds( 5_000 );
LocalTime
LocalTime
类表示没有日期且没有时区的时间。因此,这仅适用于通用的24小时工作日,而不是具有异常情况的时区,例如夏令时(DST)。
LocalTime lt = LocalTime.parse( "09:05:30" );
LocalTime later = lt.plusSeconds( 5_000 );
如果达到午夜,结果将从一小时00
开始,然后01
开始翻转到当天凌晨,依此类推。
ZonedDateTime
如果您想要一个尊重DST等的真实值,请使用ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate tomorrow = LocalDate.now( zoneId ).plusDays( 1 );
LocalTime lt = LocalTime.parse( "09:05:30" );
ZonedDateTime tomorrowAround9Am = ZonedDateTime.of( tomorrow , lt , zoneId 0;
ZonedDateTime later = tomorrowAround9Am.plusSeconds( 5_000 );