以特定格式将毫秒转换为日期

时间:2016-03-15 12:58:54

标签: java simpledateformat

使用以下代码,输出 2016年3月15日06:24:41.296 PM

Date sDate=new Date();
SimpleDateFormat pattern = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss.SSSa");
System.out.println(pattern .format(sDate));

如果我希望输出为 2016年3月15日06:00:00.0:00 ,是否可以?

2 个答案:

答案 0 :(得分:1)

您可以使用单引号在格式化日期中插入文字字符串,而不是使用Calendar并将日期部分重置为零:

SimpleDateFormat pattern = new SimpleDateFormat("dd-MMM-yyyy hh:'00:00.0'a");

Demo

答案 1 :(得分:0)

根据您是否要截断(即楼层)或围绕到最近的小时,您可以执行以下操作之一:

    final long MS_PER_HOUR = 1000L * 60 * 60;
    SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss.SSSa");

    long now = System.currentTimeMillis();
    long trunc = (now / MS_PER_HOUR) * MS_PER_HOUR;
    long round = ((now + MS_PER_HOUR / 2) / MS_PER_HOUR) * MS_PER_HOUR;

    System.out.println("now:   " + fmt.format(new Date(now)));
    System.out.println("trunc: " + fmt.format(new Date(trunc)));
    System.out.println("round: " + fmt.format(new Date(round)));

这将在09:00:00和09:29:59之间生成此输出

now:   15-Mar-2016 09:15:37.721AM
trunc: 15-Mar-2016 09:00:00.000AM
round: 15-Mar-2016 09:00:00.000AM

并且,在09:30:00和09:59:59之间的时间

now:   15-Mar-2016 09:45:50.925AM
trunc: 15-Mar-2016 09:00:00.000AM
round: 15-Mar-2016 10:00:00.000AM