如何获取一天开始时间在过去 5 分钟内的 zoneIds 列表?
How to obtain a list of zoneIds for which their day start is within past 5 minutes?
假设现在的服务器时间戳是 2022-01-26 16:02:00 PDT,我想 return 刚过午夜(一天开始)的时区列表,在这种情况下, 16:02 PDT 比 00:00 UTC 晚 2 分钟,因此在这种情况下 return [UTC]。我如何 return 给定时间戳 T 的 zoneIds 列表(来自这个集合:ZoneId.getAvailableZoneIds()
)?
“PDT”不是 real time zone。我假设你的意思是 America/Los_Angeles
.
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
将您想要的时刻定义为 ZonedDateTime
。
LocalDate ld = LocalDate.parse( "2022-01-26" ) ;
LocalTime lt = LocalTime.parse( "16:02" ) ;
ZonedDateTime target = ZonedDateTime.of( ld , lt , z ) ;
通过调用 ZoneId.getAvailableZoneIds
获取您的时区名称集。
Set< String > names = ZoneId.getAvailableZoneIds() ;
循环那些区域名称。为每个获得一个 ZoneId
对象。使用该区域对象将我们的目标调整到该区域。然后确定当天该区域中的第一时刻。
您的问题错误地假设这一天从 00:00 开始。不对。某些区域中的某些日期在另一个时间开始,例如 01:00。让 java.time 通过调用 LocalDate#atStartOfDay
.
确定当天的第一时刻
Duration limit = Duration.ofMinutes( 5 ) ;
List< ZoneId > hits = new ArrayList <>( names.size() ) ;
for( String name : names )
{
ZoneId zoneId = ZoneId.of( name ) ;
ZonedDateTime zdt = target.withZoneSameInstant( ZoneId ) ;
ZonedDateTime startOfDay = zdt.toLocalDate().atStartOfDay( zoneId );
Duration d = Duration.between ( startOfDay , zdt ) ;
if( d.compareTo( limit ) <= 0 ) { hits.add( zoneId ) ; }
}
return List.of( hits ) ;
所有这些代码都是草稿,未经测试。
假设现在的服务器时间戳是 2022-01-26 16:02:00 PDT,我想 return 刚过午夜(一天开始)的时区列表,在这种情况下, 16:02 PDT 比 00:00 UTC 晚 2 分钟,因此在这种情况下 return [UTC]。我如何 return 给定时间戳 T 的 zoneIds 列表(来自这个集合:ZoneId.getAvailableZoneIds()
)?
“PDT”不是 real time zone。我假设你的意思是 America/Los_Angeles
.
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
将您想要的时刻定义为 ZonedDateTime
。
LocalDate ld = LocalDate.parse( "2022-01-26" ) ;
LocalTime lt = LocalTime.parse( "16:02" ) ;
ZonedDateTime target = ZonedDateTime.of( ld , lt , z ) ;
通过调用 ZoneId.getAvailableZoneIds
获取您的时区名称集。
Set< String > names = ZoneId.getAvailableZoneIds() ;
循环那些区域名称。为每个获得一个 ZoneId
对象。使用该区域对象将我们的目标调整到该区域。然后确定当天该区域中的第一时刻。
您的问题错误地假设这一天从 00:00 开始。不对。某些区域中的某些日期在另一个时间开始,例如 01:00。让 java.time 通过调用 LocalDate#atStartOfDay
.
Duration limit = Duration.ofMinutes( 5 ) ;
List< ZoneId > hits = new ArrayList <>( names.size() ) ;
for( String name : names )
{
ZoneId zoneId = ZoneId.of( name ) ;
ZonedDateTime zdt = target.withZoneSameInstant( ZoneId ) ;
ZonedDateTime startOfDay = zdt.toLocalDate().atStartOfDay( zoneId );
Duration d = Duration.between ( startOfDay , zdt ) ;
if( d.compareTo( limit ) <= 0 ) { hits.add( zoneId ) ; }
}
return List.of( hits ) ;
所有这些代码都是草稿,未经测试。