使用startTime和testDuration计算endTime

时间:2016-07-14 15:39:33

标签: java beanshell

我有测试开始时间(例如9:05:30)和测试应该运行的总持续时间(比如5000秒)。如何计算从开始时间到结束时间的结束时间?

4 个答案:

答案 0 :(得分:2)

如果您正在使用Java 8时间API中的InstantZonedDateTimeLocalDateTime,则可以使用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.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对象。 InstantUTC中时间轴上的一个时刻,分辨率高达纳秒。

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 );