我正在尝试格式化日历字符串以指示我本地以外的时区偏移量。我知道我可以创建一个简单的格式化字符串并使用该Calendar.get(int)
方法填充所有值,但这感觉不是正确的方法。
Java 有一个DateFormat
,特别是我正在尝试使用SimpleDateFormat
. 问题是format()
这些类的方法需要一个Date
对象。
我主要使用Calendar
对象,因为我相信这些是 Java 中推荐的结构。所以,当我去格式化我的结果时间时,我调用Calendar.getTime()
它返回一个Date
可以传递给对象的SimpleDateFormat
对象。
到目前为止,我认为这非常简单,但问题就在这里。
每当调用该Calendar.getTime()
方法时,Date
返回的始终是本地时区,与Calendar
.
因此,当我将时间传递给 my 时,我总是会在本地时区打印时间SimpleDateFormat
,这不是我想要的。到目前为止我所做的所有研究都说它无法完成,我所看到的所有示例都只是使用该Calendar.get(int)
方法来填补一些空白。这看起来很糟糕,如果 DateFormat 类如此无用,为什么还要使用它?
这是一些示例代码,因此您可以了解我的意思,将其粘贴到您最喜欢的测试类中:
private static final SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public static void main(String[] args)
{
try
{
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));
cal.setTimeInMillis(parser.parse("2012-10-09T22:01:49.108-0700").getTime());
System.out.println(formatter.format(cal.getTime()));
}
catch(ParseException e)
{
e.printStackTrace();
}
}
产生的输出(因为我在中央时区运行):2012-10-10T00:01:49-0500
预期输出(无论从哪个时区运行):2012-10-10T01:01:49-0400
总结问题:有没有办法让 Java 中的 DateFormat 接受日历,或者获取不在本地时区的日期,或者是否有另一个类我应该完全用于这种格式?