嗨,我有一个使用webRequest
return时间戳的安卓应用程序,类型为Int(或Long),我想将其转换为人类阅读器日期时间(根据设备时区)
例如,1175714200转换为GMT:Wed,04 Apr 2007 19:16:40 GMT您的时区:4/5/2007,3:16:40 AM GMT+8:00
我用这个函数来转换,但似乎没有返回正确的结果(所有的结果都像(15/01/1970 04:04:25),这是不正确的
time.setText(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").
format(new Date(topStory.getTime() * 1000)));
上面的代码有什么问题吗?
我还有一条警告信息:
若要获取本地格式,请使用getDateInstance()、getDateTimeInstance()或getTimeInstance(),或使用新的SimpleDateFormat(字符串模板、区域设置区域设置),例如将Locale.US用于ASCII日期。更少..。(Ctrl+F1)几乎所有调用方都应该使用getDateInstance()、getDateTimeInstance()或getTimeInstance()来获取适合用户区域设置的现成的SimpleDateFormat示例。直接创建这个类的示例的主要原因是您需要格式化/解析特定的机器可读格式,在这种情况下,您几乎肯定希望显式地要求US来确保您获得ASCII数字(而不是阿拉伯数字)。
5条答案
按热度按时间rhfm7lfc1#
尝试此功能:
它从正在使用它的设备获取默认时区。如果您有任何问题/疑惑,请发表意见。此外,该函数还接受自上一纪元以来的毫秒数作为输入。如果这不是您的topStory.getTime()返回的内容,则该函数将不起作用。在这种情况下,您需要将topStory.getTime()的返回值转换为自上一个纪元以来的毫秒数。
acruukt92#
如果
topStory.getTime()
返回整型(而不是长整型),则乘以1000可能会溢出整型数值范围。要解决强制使用长数字计算乘法的问题:
vbopmzt13#
我一直使用这个SimpleDateFormat,所以下面是我使用的代码
我只是根据我的上下文这样称呼它
注意斜杠/或.通常会用另一种含义打乱你的格式。
new Date()
生成当前时间的新示例,因此不需要在format()
中计算摘自Date|Android开发者站点
Date()将该Date示例初始化为当前时间。
Date(长毫秒)使用指定的毫秒值初始化此Date示例。
编辑:如果不需要当前时间,请使用GregorianCalendar对象!
GregorianCalendar(int Year,int Month,int day)构造一个在指定日期的默认时区和区域设置中初始化为午夜的新GregorianCalendar。
然后使用
wfsdck304#
在此代码中,
topStory
是日历示例吗?乘以1000的目的是什么?尝试将其替换为Calendar.getInstance()
并移除要调试的* 1000
并检查您的输出。如果是当前时间,那么出问题的不是格式,而是您的输入。该警告很可能只是因为您的输入不是建议的类(如
Calendar
)之一的示例。f0ofjuux5#