tl; др
ZonedDateTime.parse(
"Sun Jul 10 17:47:55 EDT 2011" ,
DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US )
).getDayOfYear()
191
День года
Видимо, вы хотите сравнить день годаиз двух дат, как далеко в году проходит каждая дата независимо от года и независимо от времени суток.
Эта идея дня года часто ошибочно помечается как юлианские даты, но должным образом известнакак Порядковая дата .И даже это включает год, такой как 2017-186
.Но, по-видимому, вам нужен просто день в году, число от 1 до 365 или 366.
Использование java.time
Современный подход использует классы java.time, которые вытесняют проблемные.старые классы даты и времени, которые вы используете.
Сначала проанализируйте вашу строку как ZonedDateTime
.
String input = "Sun Jul 10 17:47:55 EDT 2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US ) ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;
zdt.toString (): 2011-07-10T17: 47: 55-04: 00 [America / New_York]
Кстати, никогда не используйте 3-4-буквенное сокращение, например EST
или IST
, так как они не истинные часовые пояса, не стандартизированные и даже не уникальные (!).Укажите правильное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
.
Наконец, получите искомое целое число дня в году.
int dayOfYear = zdt.getDayOfYear() ;
dayOfYear: 191
См. этот код запускается вживуюIdeOne.com .