jodatime LocalDate.now()

时间:2015-12-17 20:40:53

标签: java android jodatime

我正在使用Jodatime for android并得到了这个:

LocalDate.now() //returns 2015-12-17, which is today
new LocalDate(LocalDate.now().toDate().getTime()); //returns 2015-12-16, which is yesterday

这真是出乎意料!

那是

  • 我的一个误解?
  • jodatime或joda for android的错误?
  • localeZone的问题? (我和他们玩了一段时间,但这并没有改变任何东西)

我将日期存储在我的数据库中并稍后创建它们,但似乎没有任何问题。

2 个答案:

答案 0 :(得分:2)

我终于得到了答案,在你调用init的app方法中,你只需再写一行:

JodaTimeAndroid.init(this);
DateTimeZone.setDefault(DateTimeZone.forTimeZone(TimeZone.getDefault()));

这样您就可以将jodatime的默认值设置为智能手机的默认值。

我真的很惊讶这在任何地方都找不到。

答案 1 :(得分:0)

This part正在指明这一点。

  

将日期时间作为java.util.Date获取。创建的Date对象具有   与此日期完全相同的年,月和日。时间会是   设置为该日期的最早有效时间。

     

转换为JDK日期与JDK日期一样充满复杂性   构造函数不像DST转换那样表现。   此方法通过先猜测然后调整JDK来工作   日期,直到它有最早的有效时刻。这也处理了   JDK时区数据与Joda-Time时间不同的情况   区域数据。

对于你的问题(我如何使用jodatime存储日期?),你可以使用毫秒来存储日期。

试试这个;

public static void main(String[] args) {

    DateTime local = new DateTime();
    DateTime utc = new DateTime(DateTimeZone.UTC);

    System.out.println("local zone = " + local.getZone());
    System.out.println("  utc zone = " + utc.getZone());

    DateTimeFormatter format = DateTimeFormat.mediumDateTime();
    System.out.println(" local: " + format.print(local));
    System.out.println("   utc: " + format.print(utc));
    System.out.println("millis: " + utc.getMillis());
}

输出是;

local zone = America/Caracas
  utc zone = UTC
 local: 18.Ara.2015 05:06:00
   utc: 18.Ara.2015 09:36:00
millis: 1450431360816