Android将int时间戳转换为人工日期时间

plupiseo  于 2022-09-21  发布在  Android
关注(0)|答案(5)|浏览(328)

嗨,我有一个使用webRequestreturn时间戳的安卓应用程序,类型为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数字(而不是阿拉伯数字)。

rhfm7lfc

rhfm7lfc1#

尝试此功能:

private String formatDate(long milliseconds) /* This is your topStory.getTime()*1000 */ {
    DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy' 'HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(milliseconds);
    TimeZone tz = TimeZone.getDefault();
    sdf.setTimeZone(tz);
    return sdf.format(calendar.getTime());
}

它从正在使用它的设备获取默认时区。如果您有任何问题/疑惑,请发表意见。此外,该函数还接受自上一纪元以来的毫秒数作为输入。如果这不是您的topStory.getTime()返回的内容,则该函数将不起作用。在这种情况下,您需要将topStory.getTime()的返回值转换为自上一个纪元以来的毫秒数。

acruukt9

acruukt92#

如果topStory.getTime()返回整型(而不是长整型),则乘以1000可能会溢出整型数值范围。

要解决强制使用长数字计算乘法的问题:

topStory.getTime() * 1000L
vbopmzt1

vbopmzt13#

我一直使用这个SimpleDateFormat,所以下面是我使用的代码

public static String dateToString(Date date, String format) {

    SimpleDateFormat formatter = new SimpleDateFormat(format);  
    return formatter.format(date);      

}

我只是根据我的上下文这样称呼它

dateToString(new Date(), "dd_MM_yyyy_HH_mm");

注意斜杠/或.通常会用另一种含义打乱你的格式。new Date()生成当前时间的新示例,因此不需要在format()中计算

摘自Date|Android开发者站点
Date()将该Date示例初始化为当前时间。

Date(长毫秒)使用指定的毫秒值初始化此Date示例。

编辑:如果不需要当前时间,请使用GregorianCalendar对象!

GregorianCalendar(int Year,int Month,int day)构造一个在指定日期的默认时区和区域设置中初始化为午夜的新GregorianCalendar。

然后使用

GregorianCalendar cal = new GregorianCalendar(2001,11,25);
cal.add(GregorianCalendar.MONTH,2);
cal.get(GregorianCalendar.YEAR); //Returns 2002
cal.get(GregorianCalendar.MONTH); //Returns 1
cal.get(GregorianCalendar.DATE); //Returns 25
wfsdck30

wfsdck304#

在此代码中,topStory是日历示例吗?乘以1000的目的是什么?尝试将其替换为Calendar.getInstance()并移除要调试的* 1000并检查您的输出。如果是当前时间,那么出问题的不是格式,而是您的输入。

该警告很可能只是因为您的输入不是建议的类(如Calendar)之一的示例。

f0ofjuux

f0ofjuux5#

long DateInLong = 1584212400;
Date date = new Date(DateInLong * 1000L);
SimpleDateFormat simpledateformate = new SimpleDateFormat("yyyy-MM-dd");
String DATE = simpledateformate.format(date);

相关问题