2014-09-22 91 views
0

我有一个时间戳从API来的格式如下:打印UTC时间在我的本地时区

yyyy-MM-dd'T'HH:mm:ss.SSSSSS 

我想格式化它在自己的时区的用户(在Android)。这是我在做什么:

String timestampFromApi = "..."; 

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH); 
Date date = df1.parse(timestampFromApi); 

DateFormat df2 = new SimpleDateFormat(); 

Log.v(TAG, "In your timezone: " + df2.format(date)); 

但是,这会打印UTC的时间。例如,如果时间戳发生在UTC时间下午4点,并且我在PDT中,结果是它仍然打印“下午4点”。

我检查正在使用的时区:

df2.getTimeZone() 

,它并打印出PDT我的设备。我在这里做错了什么?

谢谢

+0

您的'df1.parse(timestampFromApi);'也使用PDT作为时区,因此它不知道此时间戳的时区是UTC。你首先需要'df1.setTimeZone(TimeZone.getTimeZone(“UTC”))。 – njzk2 2014-09-22 16:46:49

+0

我有这样的转换大问题。请尝试使用来自org.joda.time的另一个日期实现,如DateTime。它比java.util.Date好得多。 – Tomek 2014-09-22 16:55:58

+0

[解析日期字符串到java.Date时非法模式字符'T']的可能重复(http://stackoverflow.com/questions/2597083/illegal-pattern-character-t-when-parsing-a-date-字符串到Java的日期)。和[这](http://stackoverflow.com/questions/2201925/converting-iso-8601-compliant-string-to-java-utildate)和许多其他。发布前请先搜索StackOverflow。 – 2014-09-22 17:20:58

回答

0

你在正确的轨道上。您从服务器获得了UTC时间,但现在您只需在格式化时计算本地偏移量即可。尝试是这样的:从本地TimeZone

private String formatTime(String timestampFromApi){ 
    SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH); 
    df1.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date date = df1.parse(timestampFromApi); 

    Log.v(TAG, "In your timezone: " + df1.format(getAdjustedTime(date.getTime()))); 
} 

private Date getAdjustedTime(long utcDate){ 
    return new Date(utcDate + TimeZone.getDefault().getOffset(new Date().getTime())); 
} 

getAdjustedTime()方法将创建一个基于新Date对象UTC偏移。

相关问题