TimeZone问题的简单日期格式

时间:2011-11-25 10:46:52

标签: java

嗨我有问题simpledateformat + timezone这里是我的代码,我期待我的输出为25/11/2011,但它的返回为24/11/2011。我目前的时区是太平洋,我正在测试(25/11/2011)。 请帮忙。

嗨请找到完整的程序我不只是打印它我正在与当前日期进行比较,我希望输出为False,但它会变为True。

这是生产中发生的典型情况,服务器位于太平洋,用户来自伦敦。请告诉我这个问题的解决方案。

String  vacationStartDate = "25/11/2011";
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
//America/Los_Angeles
TimeZone tz = TimeZone.getTimeZone("Europe/London");
dateFormatter.setLenient(false);
dateFormatter.setTimeZone(tz);      
Date start = dateFormatter.parse(vacationStartDate);                    
Date todayBeginning = new Date();

if ( start.before(todayBeginning)){
    System.out.println("True ");    
} else {
    System.out.println("False ");
}

3 个答案:

答案 0 :(得分:1)

这是因为您正在解析伦敦时区的日期,但会在您的时区中将其打印出来。因此,伦敦的25/11/2011 00:00:00是您的时区中的24/11/2011 16:00:00或其他任何内容。

答案 1 :(得分:0)

您的代码返回时区的当前日期,因此输出正确。请注意,TimeZone.getTimeZone("Europe/London");正在解析的日期的时区,因此当前时区太平洋时返回的日期将在伦敦日期之前。< / p>

答案 2 :(得分:0)

日期(日/月/年)是一个根本不同的概念而不是瞬间(当我们说“假期从2011年11月25日开始”时,我们并不意味着“25/11/2011 at 00:00 :00“,我们将那一天称为整个实体)。标准Java API(和许多其他人一样)混淆了这个概念,这是一种耻辱,而你的问题(在Matthew Farwell的答案中解释)是这种混乱导致的许多荒谬问题之一:在做的时候不应该处理时区问题纯日期计算。

考虑使用Joda time,它具有特定的类(Localdate)用于纯日期。