Java中使用SimpleDataFormat进行时区转换
我有一个SimpleDataFormat解析器,它以这种方式进行解析:Java中使用SimpleDataFormat进行时区转换,java,simpledateformat,Java,Simpledateformat,我有一个SimpleDataFormat解析器,它以这种方式进行解析: sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT"); log.debug(sdf); 这给我2013年1月26日星期六03:05:14 我在这里遗漏了什么?首先,DD代表一年中的一天,你应该用DD来代替 此外,如果要以特定格式打印日期,则需要使用两种SimpleDateFormats
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
这给我2013年1月26日星期六03:05:14
我在这里遗漏了什么?首先,DD代表一年中的一天,你应该用DD来代替 此外,如果要以特定格式打印日期,则需要使用两种
SimpleDateFormat
s
simpleDataFormat.parse
返回一个Date
对象,该对象表示以给定格式指定的日期
日期
对象本身保存为常规的日期
,没有附加格式
如果要以特定格式打印,需要使用另一种
SimpleDateFormat
并调用format
方法。首先,DD代表一年中的一天,应该使用DD
此外,如果要以特定格式打印日期,则需要使用两种SimpleDateFormat
s
simpleDataFormat.parse
返回一个Date
对象,该对象表示以给定格式指定的日期
日期
对象本身保存为常规的日期
,没有附加格式
如果要以特定格式打印,需要使用另一种
SimpleDateFormat
并调用format
方法。您应该使用格式
SimpleDateFormat sdf1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:SS z");
String sdf = sdf1.format(sdf1.parse("2013-10-25 17:35:14 EDT"));
您应该使用格式
SimpleDateFormat sdf1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:SS z");
String sdf = sdf1.format(sdf1.parse("2013-10-25 17:35:14 EDT"));
有两件事
sdf
是Date
的对象,它表示一个特定的时间瞬间(从另一个被称为“历元”的瞬间开始经过的毫秒)。此对象不知道任何格式。该对象的打印方式完全由其类的方法处理,该方法以以下格式打印日期:
dow mon dd hh:mm:ss zzz yyyy
这正是您在输出中看到的。请注意,在这种情况下会打印运行程序的机器的时区。如果您希望以您选择的格式打印此对象,则应使用。要获取特定时区的输出,必须明确地将其告知DateFormat
对象(见下文)
另一件事是您应该在模式中使用dd
而不是dd
D
代表一年中的一天,D
代表一个月中的一天,我相信这就是你想要的。现在记住这两点,这是解决问题的方法之一:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("EDT")); // Time Zone for output
Date d = sdf.parse("2013-10-25 17:35:14 EDT");
System.out.println(sdf.format(d)); // You need format method
哪些产出:
2013-10-25 17:35:14 EDT
有两件事
sdf
是Date
的对象,它表示一个特定的时间瞬间(从另一个被称为“历元”的瞬间开始经过的毫秒)。此对象不知道任何格式。该对象的打印方式完全由其类的方法处理,该方法以以下格式打印日期:
dow mon dd hh:mm:ss zzz yyyy
这正是您在输出中看到的。请注意,在这种情况下会打印运行程序的机器的时区。如果您希望以您选择的格式打印此对象,则应使用。要获取特定时区的输出,必须明确地将其告知DateFormat
对象(见下文)
另一件事是您应该在模式中使用dd
而不是dd
D
代表一年中的一天,D
代表一个月中的一天,我相信这就是你想要的。现在记住这两点,这是解决问题的方法之一:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("EDT")); // Time Zone for output
Date d = sdf.parse("2013-10-25 17:35:14 EDT");
System.out.println(sdf.format(d)); // You need format method
哪些产出:
2013-10-25 17:35:14 EDT
人们回答的是什么?不了解这里更多的是一个问题:
2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013
我认为这是因为“EDT”是时区,所以,当英国的EDT是17:35时,英国的EDT是3:05,忽略了夏令时的调整。这里没有回答的人更多的是问题:
2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013
我认为这是因为“EDT”是时区,所以,当英国的EDT是17:35时,英国的EDT是3:05,忽略了夏令时调整。为什么使用javascript标记?它给出了计算机中的时间。我想我不明白这个问题。你期望的输出是什么?我很确定它是那里的
DD
-参见。它应该是dd
。您得到的是IST
时间,因为Date
没有关于时区的详细信息。它只是从一个时代以来时间的表现。看一看,然后看看这个。为什么是javascript标签?它给了你在计算机中的时间。我想我不明白这个问题。你期望的输出是什么?我很确定它是那里的DD
-参见。它应该是dd
。您得到的是IST
时间,因为Date
没有关于时区的详细信息。它只是从一个时代以来时间的表现。请看一看,这是一个很好的例子。