Я хочу, чтобы часы были установлены на произвольное время суток, а затем тикали с шагом в одну секунду.
Например, начните с «14:55:20». Тогда мое приложение должно выводить «14:55:20», «14:55:21», «14:55:22» и т. Д. За одну секунду.
Казалось бы, Clock.offset
предназначено именно для этого. Чтобы процитировать документ:
Получает часы, которые возвращают моменты от указанных часов с добавленной указанной продолжительностью
Итак, я попробовал следующее:
LocalTime localTime = LocalTime.parse( "14:55:20" );
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ).with( localTime );
Duration duration = Duration.between( odt.toInstant() , Instant.now() );
Clock clock = Clock.offset( Clock.systemUTC() , duration );
System.out.println( "odt = " + odt );
System.out.println( "duration = " + duration );
for ( int i = 1 ; i < 10 ; i++ )
{
LocalTime lt = OffsetDateTime.now( clock ).truncatedTo( ChronoUnit.SECONDS ).toLocalTime();
System.out.println( "localTime = " + lt );
try
{
Thread.sleep( TimeUnit.SECONDS.toMillis( 1 ) );
}
catch ( InterruptedException e )
{
e.printStackTrace();
}
}
Моя начальная точка с odt
кажется правильной. Но тогда мои звонки на номер OffsetDateTime.now( clock )
не дают желаемого результата.
odt = 2019-10-31T14: 55: 20Z
длительность = PT-10H-29M-4.832902S
localTime = 17: 57: 10
localTime = 17: 57: 11
localTime = 17: 57: 12
➥Я неправильно использую Clock.offset
? Или я неправильно понимаю какую-то концепцию здесь?