2016-03-15 50 views
2

使用下面的代码,输出为15月-2016 06:24:41.296PM转换毫秒为日期的特定格式

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

如果我想输出为15月-2016 06 :00:00.0PM有可能吗?

+2

您可能需要首先复位MM:你的'Date'的SS.SSS一部分,在这里看到:http://stackoverflow.com/questions/17821601/set-time-to-000000 – Berger

+0

代替做一个新的Date()'得到一个'Calendar'实例,并将分钟和秒设为0. – Sachin

+1

所以实际上你想要将y我们的日期时间分辨率?如果时间是5.59.59,该怎么办? – leonbloy

回答

1

而不是使用Calendar和重置日期的部分到零,您可以使用单引号的格式化的日期插入文字字符串:

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

Demo

+0

为了避免混淆,您可以在答案中明确指出日期本身不会改变,只有格式化程序给出的视觉表示才会改变。 – Spotted

+1

@Spotted我不确定混淆的地方 - SimpleDateFormat永远不会改变它传递的日期。 –

+0

哇,很酷,正是我想要的。非常感谢! – user2359634

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和9点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