当前位置: 首页 > 知识库问答 >
问题:

Android将整数时间戳转换为人类日期时间

陶高峯
2023-03-14

嗨,我有一个android应用程序,使用webRequest返回Int(或Long)类型的时间戳。我想将其转换为人类阅读器日期时间(根据设备时区)

例如,1175714200转换为GMT:2007年4月4日星期三19:16:40 GMT您的时区:2007年4月5日,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)));

上面的代码有什么问题吗?

我也有警告信息:

要获取本地格式,请使用getDateInance()、getDateTimeInance()或getTimeInance(),或者使用新的SimpleDateFormat(String模板,Locale语言环境),例如Locale.US用于ASCII日期。更少…(Ctrl F1)几乎所有调用者都应该使用getDateInance()、getDateTimeInance()或getTimeInance()来获取适合用户语言环境的现成的简单数据格式实例。直接创建此类实例的主要原因是因为您需要格式化/解析特定的机器可读格式,在这种情况下,您几乎肯定希望明确要求US以确保您获得ASCII数字(而不是阿拉伯数字)。

共有3个答案

廉元龙
2023-03-14

我一直使用这个简单的数据格式,所以这是我使用的代码

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");

注意斜线/或\……通常会用其他意思打乱格式newDate()创建当前时间的新实例,因此不需要使用format()中的数学运算

摘自日期| Android开发者网站

Date() 将此 Date 实例初始化为当前时间。

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

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

公历(int year, int month, int day ) 构造一个新的公历,该日历在指定日期以默认时区和区域设置初始化为午夜。

然后使用

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
邵和硕
2023-03-14

如果< code>topStory.getTime()返回一个int(而不是long ),乘以1000可能会溢出int数范围。

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

topStory.getTime() * 1000L
益银龙
2023-03-14

尝试此功能:

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() 的返回值转换为自上一个纪元以来的毫秒数。

 类似资料:
  • 问题内容: 我必须将linux时间戳转换为android日期。我从服务器获得此号码 我写了一个小代码段。 但这不能正确转换,这是我的结果 编辑 :通常我必须在这里 还有另一种获取正确日期的方法吗??? 问题答案: UNIX时间戳记应以毫秒为单位,因此将Long值乘以1000。因此,您的值1386889262将为1386889262000:

  • 我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案

  • 问题内容: 考虑到python中的pandas数据帧具有名为integer类型的列,我可以使用以下指令将其转换为格式。 因此,该列现在具有以下条目:。 将字符串恢复为整数时间戳值(代表从过去的秒数)的命令是什么? 我检查了但找不到转换实用程序,因此无法使用它。 此转换有实用程序吗? 问题答案: 您可以使用类型转换为int并将其除以以获取unix纪元开始的秒数。

  • 问题内容: 我尝试将其转换为java.sql.Timestamp后插入,并使用以下代码段: 但是,这是给我的 有没有办法在没有毫秒的情况下获得输出? 问题答案: 您可以使用来减少毫秒数: 输出:

  • 问题内容: 我有以下整数形式的时间戳 我可以使用SQL进行转换: 如何在Java中转换它?这样它将返回值: 问题答案: 假设自1970年1月1日以来的时间(以秒为单位)。你可以试试

  • 问题内容: 我在mysql数据库中有一个timestamp变量列。尝试将Carbon时间戳转换为我可以在此处输入的内容,但仅返回Carbon对象,当我尝试使用Carbon对象的时间戳字符串时,它未在mysql中注册。 我的第一个var dump就像这样: 我的第二个var dump就是这样。 与“ published_at”有关的mysql列是一个时间戳变量。我想如何将其从Carbon对象转换为?