2014-10-17 76 views
4

我有两次String t1 = "17:00:00-07:00"String t2 = "23:59:00-07:00",这是当地时间下午5点和当地时间下午11:59(我的时区是PT)。Java如何比较当前时间是否在两个时间范围

假设我在美国东部时区。如何知道当前时间是否在时区差异的t1和t2范围内?

我试着使用:

ISODateTimeFormat.timeNoMillis() 
     .parseDateTime(t1) 
     .withZone(DateTimeZone.UTC) 
     .toLocalTime() 
     .toDateTimeToday(); 

,但它给了我17:00:00-04:00时,我期待像20:00:00-04:00

+1

'withZone(DateTimeZone.UTC).toLocalTime()'为什么? – njzk2 2014-10-17 20:39:30

+0

因此,我可以将日期时间转换为当前日期,时间为 – user3709877 2014-10-17 21:12:14

+0

@ user3709877前几次我的回答不正确,但现在我确信它是正确的。 – durron597 2014-10-17 21:32:05

回答

1

假设ISODateTimeFormat.timeNoMillis()将始终是适当的解析器,您希望使用Interval类。此外,使用parseLocalTime()而不是parseDateTime(),然后使用convert it to a DateTime使用.withOffsetParsed() method以确保时区得到正确处理。

public static boolean isNowBetweenRange(String t1, String t2) {  
    DateTime time1 = normalizeString(t1); 
    DateTime time2 = normalizeString(t2); 

    Interval interval = new Interval(time1, time2); 

    return interval.contains(DateTime.now()); 
} 

private static final DateTimeFormatter FORMAT = 
        ISODateTimeFormat.timeNoMillis().withOffsetParsed(); 

private static DateTime normalizeString(String t1) { 
    DateTimeZone zone = FORMAT.parseDateTime(t1).getZone(); 
    return FORMAT 
     .parseLocalTime(t1) 
     .toDateTimeToday(zone); 
} 
相关问题