【问题标题】:How to convert date time in hex in android如何在android中将日期时间转换为十六进制
【发布时间】:2017-12-21 12:29:14
【问题描述】:

我需要将日期和时间转换为十六进制代码,以便在 IOT 设备上写入。 这是我的代码

private String getDateTimeToHexa() { 

Calendar mCalendar = Calendar.getInstance();
TimeZone gmtTime =  TimeZone.getTimeZone(TimeZone.getDefault().getDisplayName());

    mCalendar.setTimeZone(gmtTime);
    final Date date = mCalendar.getTime();
    return Long.toHexString(date.getTime());
}

它返回 11 位十六进制代码我需要 8 位数字,就像十六进制的日期和时间是 47C7EDE0 对于这个日期 12:34:56 29/Feb/2008

请帮忙

【问题讨论】:

  • Integer.toHexString((int)(System.currentTimeMillis() / 1000))?
  • date.getTime() 返回的值以毫秒为单位,而 47C7EDE0 的十六进制值以秒为单位。这就是@shmosel 的评论正确的原因,因为它将毫秒转换为秒,然后再将其转换为十六进制。要查看47C7EDE0 以秒为单位,请尝试打印new Date(0x47C7EDE0 * 1000L)。我收到Fri Feb 29 06:34:56 EST 2008 因为我在美国东部时区。
  • 如果你有 Java 8,打印Instant.ofEpochSecond(0x47C7EDE0),你会得到2008-02-29T11:34:56Z。您显示的日期似乎是中欧时区。

标签: java android hex iot


【解决方案1】:

试试这个:

 private String getDateTimeToHexa() {
        Calendar mCalendar = Calendar.getInstance();
        TimeZone gmtTime =  TimeZone.getTimeZone(TimeZone.getDefault().getDisplayName());
        mCalendar.setTimeZone(gmtTime);
        final Date date = mCalendar.getTime();
        return Long.toHexString(date.getTime()/1000);
    }

【讨论】:

  • 人们不会简单地将毫秒时间戳转换为int。
  • 当然不是。您只是在没有任何转换逻辑的情况下截断数据。
【解决方案2】:

而不是返回

return Long.toHexString(date.getTime());

返回关注

return Long.toHexString(date.getTime()/1000);

正如@shmosel 正确指出的那样, date.getTime() 以毫秒为单位返回时间,如果您想要 8 位十六进制格式,则需要将其转换为第二种格式。

Date的返回类型可以找到here

【讨论】:

    【解决方案3】:
    import java.util.Calendar;
    import java.util.Date;
    public class Date {
        public static void main(final String[] args)
        {
        final Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DATE, 15);
        cal.set(Calendar.MONTH, Calendar.DECEMBER);
        cal.set(Calendar.YEAR, 2005);
        cal.set(Calendar.HOUR, 17);
        cal.set(Calendar.MINUTE, 35);
        cal.set(Calendar.SECOND, 20);
        final Date date = cal.getTime();
    
        System.out.printf("Date %s is encoded as: %s\n", date, Long.toHexString(date.getTime()));
        // decode with: new Date(Long.parseLong("1082f469308", 16))
    }
    

    }

    【讨论】:

    • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2015-03-12
    • 2021-01-04
    相关资源
    最近更新 更多