簡體   English   中英

使用jodatime LocalDate.now()產生意外結果

[英]Unexpected result with jodatime LocalDate.now()

我正在為Android使用Jodatime並得到了這個:

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的bug?
  • 一個localeZone問題? (我已經和他們玩了一段時間了,但是什么都沒改變)

我將日期存儲在數據庫中的時間很長,然后再創建它們,但是似乎沒有任何問題。

我終於得到了答案,在調用init的app方法中,您只需要再寫一行:

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

這樣,您可以將jodatime的默認值設置為智能手機的默認值。

我真的很驚訝,這在任何地方都找不到。

這部分指定了這一點。

以java.util.Date獲取日期時間。 創建的Date對象具有與此日期完全相同的年,月和日。 時間將設置為該日期的最早有效時間。

轉換為JDK Date充滿了復雜性,因為JDK Date構造函數的行為不如您預期的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM