Java将epoch时间戳0转为Date未输出1970/01/01 00:00问题求助
问题排查与修复方案
你遇到的输出异常由两个原因共同导致:
1. 格式化时未指定时区
SimpleDateFormat默认会使用JVM的默认时区(和操作系统时区保持一致),而时间戳0对应的是UTC时区的1970-01-01 00:00:00,如果你处于东12区,输出时间就会对应偏移12小时,最终显示为12:00。你换用Calendar操作仍然输出异常,是因为输出环节依然使用了默认时区的SimpleDateFormat进行格式化,和Date/Calendar的取值逻辑无关。
2. 时间格式化符使用错误
你使用的hh是12小时制的格式化标识,就算时间实际为00:00,用hh格式化也会显示为12:00,24小时制需要使用HH作为格式化符。
修复后的代码示例
Calendar origin = Calendar.getInstance(); origin.clear(); origin.setTimeInMillis(0); Date date_origin = new Date(origin.getTimeInMillis()); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); // 显式指定格式化使用UTC时区 sdf.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println("Date origin "+sdf.format(date_origin));
运行后即可输出你预期的 Date origin 01/01/1970 00:00。
内容的提问来源于stack exchange,提问作者tiamat
相关产品推荐
相关产品推荐

