我将服务器时区转换为我的时区有问题。我的服务器在美国。
这是我的代码:
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));
但它仍打印美国时间。怎么解决这个问题?
答案 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();