我试图了解java中的日期是如何被解析的,我似乎无法绕过我需要传递的参数来获得一致的输出,无论我在哪个时区。
我写了这个测试类:
import java.util.Date;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
public class TimeTest {
public static void main(String [] args) throws Exception
{
String dateString = "2012-03-28 11:45:00 +0200";
String dateString1 = "2012-03-28 11:45:00 +0000";
Timestamp timestamp= null;
Timestamp timestamp1= null;
DateFormat planningDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
Date date = planningDateFormat.parse(dateString);
Date date1 = planningDateFormat.parse(dateString1);
timestamp = new Timestamp(date.getTime());
timestamp1 = new Timestamp(date1.getTime());
System.out.println("Time value passed in was: " + dateString);
System.out.println("Date value after parse: " + date);
System.out.println("Time stamp value is: " + timestamp);
System.out.println("Time value passed in was: " + dateString1);
System.out.println("Date value after parse: " + date1);
System.out.println("Time stamp value is: " + timestamp1);
}
}
给出以下输出:
Time value passed in was: 2012-03-28 11:45:00 +0200
Date value after parse: Wed Mar 28 10:45:00 IST 2012
Time stamp value is: 2012-03-28 10:45:00.0
Time value passed in was: 2012-03-28 11:45:00 +0000
Date value after parse: Wed Mar 28 12:45:00 IST 2012
Time stamp value is: 2012-03-28 12:45:00.0
现在让我解释为什么这个没有任何意义:
在第一次传球中,我在11:45的时间内以+0200偏移传球,它给我的时间IST是爱尔兰标准时间10:45。
任何人都可以向我解释那里发生了什么以及它如何得出这个结论?时间从11:45过去,这表示当地时间11:45 UTC或11:45(对于偏移量为+0200的国家/地区)。从我看来,在我看来,时间代表当地时间。
另一个问题是:
如果我在爱尔兰,冬天是+0000,夏天是+0100。根据我查询的日期,传入“Z”的值会改变吗?或者不应该java自动知道这取决于日期传递的时间?
我真的不知道发生了什么事。
答案 0 :(得分:1)
格式模式中的Z
表示与UTC的绝对偏移量。当您说11:45:00 +0200
时,它等于09:45:00 UTC
所代表的时间;即比UTC的时间提前2小时。由于IST是UTC + 1,我们有:
11:45:00 +0200
==09:45:00 UTC
==10:45:00 IST
如果使用时区别名(例如Europe/Dublin
)而不是绝对偏移量,Java将根据您提供的日期部分自动处理夏令时规则。
答案 1 :(得分:0)
是的,传入的时间是当地时间。通过说2012-03-28 11:45:00 +0200
你实际上说“11:45在时区中对于UTC +02:00”。当然,时间以当地时间显示(由于DST,它与UTC相比为+01:00,因此从通过的时间减去一小时)。
Date方法确实遵守夏令时。尝试更改本地系统日期,您会看到返回的时间也会发生变化。或者尝试输入CDT,CST,MDT,MST和Date类支持的类似timezome字符串 - 他们都知道夏令时。