我正在尝试将UTC日期时间戳转换为任何时区,但在这两种情况下我总是以UTC日期时间结束。
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class UTCtoLocalTime {
private static String ConvertToLocalTime(String id, String time) throws ParseException{
DateFormat localtime = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
localtime.setTimeZone(TimeZone.getTimeZone(id));
return localtime.format(localtime.parse(time));
}
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC"));
String time = dateFormatGmt.format(new Timestamp(System.currentTimeMillis()));
System.out.println("UTC time "+ time);
System.out.println("Local Time "+ ConvertToLocalTime("America/Mexico_City", time));
}
}
我不确定我在哪里做错了。任何人都可以帮助我吗?
答案 0 :(得分:1)
日期没有时区。在字符串17824
3224
(Blank space for Year 2002)
中,您以某种方式显示日期,并期望该显示使用其他时区。它不会。
字符串time
表示一个时区中的时间戳,您希望将其更改为表示另一个时区中的时间戳的字符串,
所以基本上你有
创建另一个SimpleDateFormat并将第二个时区应用于它 使用它将Date对象格式化为新的String
这是实施代码
time
我机器上的OutPut
public class TestClass {
private static String ConvertToLocalTime(String id, String time) throws ParseException{
DateFormat localtime = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
localtime.setTimeZone(TimeZone.getTimeZone(id));
return localtime.format(localtime.parse(time));
}
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC"));
String time = dateFormatGmt.format(new Timestamp(System.currentTimeMillis()));
System.out.println("UTC time "+ time);
SimpleDateFormat dateFormatGmt1 = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
String time1 = dateFormatGmt1.format(new Timestamp(System.currentTimeMillis()));
System.out.println("Local Time "+ ConvertToLocalTime("America/Mexico_City", time1));
}
}
答案 1 :(得分:0)
我在这里使用它来实现我的目的
public static String UTCtolocaltime(String timzoneid, String UTCTime){
String convertedlocaldatetime;
Date datetimeinutc = null;
SimpleDateFormat utcdateFormat = new SimpleDateFormat(some patteren);
utcdateFormat.setTimeZone(TimeZone.getTimeZone(UTC));
try {
datetimeinutc = utcdateFormat.parse(UTCTime);
} catch (ParseException e1) {
log.error(e1);
}
SimpleDateFormat localdateFormat = new SimpleDateFormat(some patteren);
localdateFormat.setTimeZone(TimeZone.getTimeZone(timzoneid));
convertedlocaldatetime = localdateFormat.format(datetimeinutc);
return convertedlocaldatetime;
}
答案 2 :(得分:0)
JODA时间容易:
假设你有一个DateTime存储以UTC为单位的传入日期时间,那么获取另一个时区的字符串表示的方法仅仅是:
{% with obj.site.profile.default_role==obj as default %}{% endwith %}
{% with default=obj.site.profile.default_role==obj %}{% endwith %}
在UTC和另一个时区之间进行String,LocalDateTime和Datetime转换的不同组合都非常容易