JODA api在时区之间转换日期

时间:2014-05-01 07:35:05

标签: java datetime timezone jodatime

我想将一个日期从一个TimeZone转换为另一个。已经遇到java.util.Date的问题, 所以按照人们的建议尝试使用JODA -

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    import org.joda.time.DateTime;
    import org.joda.time.DateTimeZone;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;


    public class JodaTimeTest {
        public static void main(String[] args) throws ParseException {
            DateFormat formatter = new SimpleDateFormat("dd-MMM-yy hh:mm:ss a");
            System.out.println(getDateStringToShow(formatter.parse("26-Nov-10 03:31:20 PM +0530"), "Asia/Calcutta", "Europe/Dublin", false));
            System.out.println(getDateStringToShow(formatter.parse("02-Oct-10 10:00:00 AM +0530"), "Asia/Calcutta", "Europe/Dublin", false));
            System.out.println(getDateStringToShow(formatter.parse("26-Nov-10 11:51:20 PM +0530"), "Asia/Kolkata", "Europe/Dublin", false));
            System.out.println(getDateStringToShow(formatter.parse("02-Oct-10 01:01:00 AM +0530"), "Asia/Kolkata", "Europe/Dublin", false));
        }

        public static String getDateStringToShow(Date date, String sourceTimeZoneId, String targetTimeZoneId, boolean includeTime) {
            DateTime dateRes = new DateTime(date);

            DateTime nowIndia = dateRes.toDateTime(DateTimeZone.forID(sourceTimeZoneId));
            DateTime nowDub = nowIndia.toDateTime(DateTimeZone.forID(targetTimeZoneId));

            DateTimeFormatter fmt = DateTimeFormat.forPattern("dd-MMM-yy z");
            System.out.println("nowIndia : " + fmt.print(nowIndia));
            System.out.println("nowDub : " + fmt.print(nowDub));
            return "---next---";
        }
    }

运行时 -

    nowIndia : 26-Nov-10 IST
    nowDub : 26-Nov-10 GMT
    ---next---

    nowIndia : 02-Oct-10 IST
    nowDub : 02-Oct-10 IST
    ---next---

    nowIndia : 26-Nov-10 IST
    nowDub : 26-Nov-10 GMT
    ---next---

    nowIndia : 02-Oct-10 IST
    nowDub : 01-Oct-10 IST
    ---next---

任何人都可以建议我为什么显示IST的日期 - 02-Oct-10 10:00:00 AM +0530

1 个答案:

答案 0 :(得分:2)

与许多时区缩写一样,"IST"并非唯一。它可以代表以下任何一种:

  • 印度标准时间(UTC + 05:30)
  • 以色列标准时间(UTC + 02:00)
  • 爱尔兰标准时间(UTC + 01:00)

Europe/Dublin是爱尔兰的时区ID。与英国一样,它在冬季使用“格林威治标准时间”这个名称。但在夏季,当英国转向“英国夏令时”时,爱尔兰将转向“爱尔兰标准时间”。

尽管名称中包含“标准”字样,但此时区的日光名称仍然存在。如果你看到“爱尔兰夏令时” - 这是错误的。

2010年,Europe/Dublin遵循爱尔兰标准时间from March 28 through October 31,这解释了为什么你会看到10月1日至10日的IST,而不是10月26日至10月的GMT。

另一方面,印度全年遵循印度标准时间,因此IST始终适用。

有关其他详细信息,请参阅: