Java 如何在Android中解码日期日期时间戳

Java 如何在Android中解码日期日期时间戳,java,android,simpledateformat,datetime-format,dayofmonth,Java,Android,Simpledateformat,Datetime Format,Dayofmonth,下面的代码给了我Datetimestamp作为[2020-07-183 17:07:55.551]。问题是Datetimestamp中的“Day”有三个数字。如何将currentTimeMillis格式化为月日的正确格式 public String Datetimesetter(long currentTimeMillis, SimpleDateFormat dateFormat) { dateFormat = new SimpleDateFormat(&qu

下面的代码给了我Datetimestamp作为[2020-07-183 17:07:55.551]。问题是Datetimestamp中的“Day”有三个数字。如何将
currentTimeMillis
格式化为月日的正确格式

 public String Datetimesetter(long currentTimeMillis, SimpleDateFormat dateFormat) {
        
        dateFormat = new SimpleDateFormat("YYYY-MM-DD HH:MM:SS.SSS");
        // Create a calendar object that will convert the date and time value in milliseconds to date.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(currentTimeMillis);
        return dateFormat.format(calendar.getTime());
    }
对我有效的解决方案:


请访问链接。

这适用于您支持API级别26的应用程序(对
java.time的本机支持)或您愿意/允许使用相同功能的应用程序

然后您可以使用正确/匹配的模式(考虑三位数天数的模式),如下所示:

public static void main(String[] args) {
    // mock / receive the datetime string
    String timestamp = "2020-07-183 17:07:55.551";
    // create a formatter using a suitable pattern (NOTE the 3 Ds)
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-DDD HH:mm:ss.SSS");
    // parse the String to a LocalDateTime using the formatter defined before
    LocalDateTime ldt = LocalDateTime.parse(timestamp, dtf);
    // and print its default String representation
    System.out.println(ldt);
}
哪个输出

2020-07-01T17:07:55.551

所以我猜183号那天实际上是7月1日。

您的日期格式不正确

dateFormat = new SimpleDateFormat("YYYY-MM-DD HH:MM:SS.SSS");
换成这个

dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS.SSS");

您希望以哪种格式输出?如果可以,请避免使用
java.util.Date
。。。您的应用程序支持的最低API级别是多少?一天中的3位数字很可能是一年中的某一天……基本上,您需要仔细阅读
SimpleDateFormat
的文档。您的模式是错误的-您可能是指
yyyy-MM-dd HH:MM:ss.SSS
,但我同意deHaar的观点,即最好尽可能避免使用java.util.Date。这里的各种解决方案-->这个类是与java最早版本捆绑在一起的糟糕的日期时间类的一部分,多年前被java.time类取代。对于现代解决方案,请参见.FYI,由于新功能:.deHaar,我确信OP希望将纪元后的毫秒数格式化为非常传统的日期-时间字符串,因此似乎不再需要在早期Android上使用后端端口来支持。至少我认为问题中的字符串是格式化的观察结果(而不是程序的输入)。我已经编辑了问题文本以同意问题中的代码,我希望它更清晰(并且与OP的意图一致)。正如您所知,我对java.time的使用表示赞赏。@OleV.V。谢谢你的评论,很抱歉耽搁了,我在我的移动设备上读到了评论,想稍后再回答,但就是忘了。在重读了这个问题之后,我现在认为你是对的,我的回答没有完全涵盖问题的所有方面。这个答案似乎适合接受,但正如你所说,它并没有完全满足要求。是的,我看到答案被接受了。也许我错了@MdBasha,如果只是出于我们的好奇,你能澄清一下吗?当然,我会发布我这边@OleV.V的实现步骤。