簡體   English   中英

喬達時間未得到預期的結果

[英]Joda Time Not getting expected result

我有一個使用SimpleDateFormat解析的MM/dd/yyyy格式的日期字符串

現在,對於下面給出的代碼, startDateString11/26/2012 我將時區設置為America / New_York

SimpleDateFormat df=new SimpleDateFormat("MM/dd/yyyy");

Date st = df.parse(startDateString);

Calendar startDate = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));

System.out.println("BEFORE : Start Date :"+startDate.getTime());

startDate.setTime(st);

System.out.println("AFTER : Start Date :"+startDate.getTime());

DateTimeZone timezone = DateTimeZone.forID("America/New_York");

DateTime actualStartDate = new DateTime(startDate,timezone);

System.out.println("JODA DATE TIME "+ actualStartDate);

以上代碼段的內容:

BEFORE : Start Date :Tue Nov 27 12:26:51 IST 2012

AFTER : Start Date :Mon Nov 26 00:00:00 IST 2012 //ok it sets date to 26th
                                                 //with all time parameters as 0.

JODA DATE TIME 2012-11-25T13:30:00.000-05:00 // here the date and 
                                             // time parameter are changed

我的問題是當我這樣創建我的actualStartDate

DateTime actualStartDate = new DateTime(startDate,timezone);

日期更改為25,時間更改為13:00:00
我認為這是由於印度和美國之間的時區不同(IST印度時間總計-10:30)

我想要的是JODA DATE TIME 2012-11-26T00:00:00.000-05:00

我是否將startDate日歷實例內的時間參數手動設置為0

我懷疑問題在於您正在解析默認時區。 這個:

AFTER : Start Date :Mon Nov 26 00:00:00 IST 2012

顯示您使用的時間是IST午夜-而不是紐約或UTC的午夜。 目前,國際標准時間(IST)是UTC的18:30,因此您表示的時刻是25-11-25T18:30:00Z。

當您將其轉換為紐約時間時,最終將獲得2012-11-25T13:30:00-05:00,這正是喬達時間所做的。

我強烈建議:

  • 您完全避免使用Java庫(這是所有問題都出在這里的地方-解析以及Date.toString()的結果都使您感到困惑)
  • 您使用LocalDate表示日期,而不是DateTime 您畢竟想表示一個日期 ,而不是時間。 這繞過時區的全部,作為一個日期沒有一個時區。

樣例代碼:

import java.util.*;

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main (String[] args) {
        String text = "11/26/2012";
        DateTimeFormatter formatter =
            DateTimeFormat.forPattern("MM/dd/yyyy")
                          .withLocale(Locale.US);

        LocalDate date = formatter.parseLocalDate(text);
        System.out.println(date);
    }    
}

獲得 LocalDate ,如果要查找特定日期所在的那一天的開始時刻,則可以使用LocalDate.toDateTimeAtStartOfDay(DateTimeZone)

暫無
暫無

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

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