在SimpleDateFormat()中更改时区

时间:2014-05-17 03:45:02

标签: java timezone simpledateformat

我将服务器时区转换为我的时区有问题。我的服务器在美国。

这是我的代码:

long orderID = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("hh':'mm':'ss' 'a");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kuala_Lumpur"));
Date orderTime = new Date(orderID);

System.out.print(sdf.format(orderTime));

但它仍打印美国时间。怎么解决这个问题?

1 个答案:

答案 0 :(得分:4)

与Java捆绑在一起的旧java.util.Date和.Calendar类非常麻烦。避免他们。请使用合适的日期时间库。这意味着要么是Joda-Time,要么是Java 8中捆绑的java.time包。

约达时间

Joda-Tim e 2.3中,一些示例代码。

实例化日期时间值,并指定时区。与java.util.Date不同,Joda-Time DateTime实例知道自己分配的时区。

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kuala_Lumpur" );
DateTime dateTime = DateTime.now( timeZone );

生成日期时间值的字符串表示形式。使用仅使用JVM的默认语言环境以本地化格式显示时间而不显示日期的格式。如果您需要特定的非本地化格式,请使用DateTimeFormat.forPattern指定自定义格式。

DateTimeFormatter formatter = DateTimeFormat.forStyle( "-S" );
String output = formatter.print( dateTime );

如果要指定区域设置,请致电formatter.withLocale( yourLocaleInstanceGoesHere)

转换为其他时区。

DateTime dateTimeUtc = dateTime.withTimeZone( DateTimeZone.UTC );

如果其他类需要,则转换为java.util.Date。

java.util.Date date = dateTime.toDate();