我试图将字符串(带有unix时间戳)转换为格式为(dd-MM-yyyy)的日期
这部分工作。我现在的问题是我的约会时间是17-01-1970(而不是2015年3月16日)
即时转换它:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = null;
int dateMulti = Integer.parseInt(Date);
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(dateMulti);
String date = DateFormat.format("dd-MM-yyyy", cal).toString();
Log.d("test",date);
try {
d = dateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
其中Date = 1427101853 结果= 17-01-1970
我做错了什么?
答案 0 :(得分:21)
您在第一行使用了错误的格式字符串:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
mm
是分钟。请改用MM
(月)。
编辑自格林威治标准时间01-01-1970 00:00:00以来,Unix时间戳是秒的数字。自01-01-1970 00:00:00 GMT以来,Java以毫秒的形式测量时间。您需要将Unix时间戳乘以1000:
cal.setTimeInMillis(dateMulti * 1000L);
答案 1 :(得分:1)
为什么"dd-mm-yyyy"
中的SimpleDateFormat
和"dd-MM-yyyy"
中的DateFormat.format
?使用此:
String date = DateFormat.format("dd-mm-yyyy", cal).toString();
如果你想要分钟,如果你想要几个月,你必须把MM
像@Jesper所说:)
答案 2 :(得分:0)
我想贡献现代的答案。
DateTimeFormatter dateFormatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.forLanguageTag("da"));
String unixTimeStampString = "1427101853";
int dateMulti = Integer.parseInt(unixTimeStampString);
ZonedDateTime dateTime = Instant.ofEpochSecond(dateMulti)
.atZone(ZoneId.of("Africa/Conakry"));
String formattedDate = dateTime.format(dateFormatter);
System.out.println(formattedDate);
此代码段的输出为:
2015年3月23日
输出与在线转换器一致(底部链接)。它告诉我您的时间戳等于“ 03/23/2015 @ 9:10 am(UTC)”(也同意您提出问题的日期)。如果不是非洲/科纳克里,请替换您的时区。
您使用的日期时间类-SimpleDateFormat
,Date
和Calendar
-早已过时且设计欠佳,因此我建议您跳过它们并使用java.time,而是使用现代的Java日期和时间API。众多优点中的次要优点是它可以直接接收到自纪元开始的秒数,因此您无需转换为毫秒。尽管这没什么大不了的,但是自己进行时间转换是一个坏习惯,通过将转换留给适当的库方法,您可以获得更清晰,更有说服力且更少出错的代码。
是的,java.time
在较新的Android设备上都能很好地工作。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。我使用反向端口编写并运行了上面的代码片段,以确保它与ThreeTenABP兼容。
java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 3 :(得分:0)
在使用SimpleDateFormat
时,我也遇到了同样的问题,这是我做的一种方法,对我来说很好用。
private String getmDate(long time1) {
java.util.Date time = new java.util.Date((long) time1 * 1000);
String date = DateFormat.format("dd-MMM-yyyy' at 'HH:mm a", time).toString();
return date + "";
}
您可以根据需要更改日期格式。