如何获取一天开始时间在过去 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 ) ;

所有这些代码都是草稿,未经测试。