我想把日期转换成“印度时间”。具体来说:“亚洲/加尔各答”。
代码:
// TODO Auto-generated method stub
Date date=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
String dateString=simpleDateFormat.format(date);
System.out.println("Currect Date : " + dateString);
// This is returning a string and I want a date.
System.out.println("Wrong Output : "+simpleDateFormat.parse(dateString)); 
//This returns a Date but has incorrect result.以下是上述代码的输出:
Correct Date : 2013-04-15 15:40:04
Wrong Output : Mon Apr 15 03:10:04 MST 2013我想要的是日期,而不是字符串,但是当我检索日期时,时间是3:10,当我得到字符串时,我得到的是15:40:04。为什么这些不一样呢?
发布于 2013-04-15 18:29:37
parse()解析date文本并构造Date对象,该对象是一个长值。parse() javadoc表示
The TimeZone value may be overwritten, depending on the given pattern and 
the time zone value in text. Any TimeZone value that has previously been 
set by a call to setTimeZone may need to be restored for further operations.您的解析日期对象是通过在Date上调用toString()来打印的,Date在MST时区中打印了它。如果您将其从MST转换为IST,那么您将获得您期望的时间戳。因此,您的输出是正确的。您所需要做的就是使用正确的时区格式化和打印您的长日期值。
发布于 2013-04-15 18:18:48
Parse将返回一个DateObject,因此调用:
System.out.println("Wrong Output : "+simpleDateFormat.parse(dateString));有点类似于:
Date d1 = simpleDateFormat.parse(dateString);
System.out.println("Wrong Output : "+d1.toString());记住,解析date仅仅是解析一个字符串来生成一个date对象,如果您想以某种格式显示它,请使用该date对象并对其调用sdf.format。例如:
 String dateStringOut=simpleDateFormat.format(d1);
 System.out.println("Output : "+dateStringOut);发布于 2013-04-15 18:18:56
Date不包含任何格式。它只是一个Date。因此,不能在不同的输出格式之间转换Date对象。一旦您有了日期,就没有必要尝试将其转换为不同的格式。当您使用SimpleDateFormat将其转换为String时,将决定如何格式化它。因此,一旦解析了Date,只需保留它,直到您需要格式化它以便输出。
https://stackoverflow.com/questions/16012614
复制相似问题