为了给您一个概述,我们有一个MDB应用程序,我们在那里接收全天的交易。 Feed中的一列是ddmmyyyy hhmiss格式的日期。我们试图通过SimpleDateFormat(java api)解析它,以便我们可以将字符串解析为日期对象以插入表中。
发生的事情是,在某些情况下,我的日期会移到上一个日期。观察结果是它已经向后移动了5-6个小时,导致交易成为BVT,尽管事实并非如此。 例如:其中一笔交易已于9月24日格林尼治标准时间上午12点01分到达,但在表格中插入时间为9月23日晚7点30分。
我还要你注意服务器在芝加哥。因此,考虑到服务器时间是因为伦敦和芝加哥之间几乎有5-6小时的时差?
代码段如下:
SimpleDateFormat lDtFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss");
Timestamp lDtmp = new java.sql.Timestamp(lDtFormat.parse(strParseString).getTime());
现在我的问题是我应该通过将语言环境传递给构造函数来更改上面的代码。
SimpleDateFormat lDtFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss",Locale.UK);
以上代码段会解决问题吗?
现在设置语言环境后,它不会转换时间并最终转换日期吗?
答案 0 :(得分:1)
在SimpleDateFormat的构造函数中显式地赋予局部是不够的。其目的主要是支持格式化或解析本地化字符串,如“March”(英语),“Maart”(荷兰语)等。
您还需要在SimpleDateFormat中设置时区,这可能是伦敦的时区,如下所示:
lDtFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
您还应该检查服务器上的时区是否应该在国际日期和时间交换方案中更好地配置为UTC(“GMT”)。