使用下面的代码,输出为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有可能吗?
使用下面的代码,输出为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有可能吗?
而不是使用Calendar
和重置日期的部分到零,您可以使用单引号的格式化的日期插入文字字符串:
SimpleDateFormat pattern = new SimpleDateFormat("dd-MMM-yyyy hh:'00:00.0'a");
为了避免混淆,您可以在答案中明确指出日期本身不会改变,只有格式化程序给出的视觉表示才会改变。 – Spotted
@Spotted我不确定混淆的地方 - SimpleDateFormat永远不会改变它传递的日期。 –
哇,很酷,正是我想要的。非常感谢! – user2359634
根据您是否想要截断(即楼层)或轮到最近的小时,您可以执行以下操作之一:
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
您可能需要首先复位MM:你的'Date'的SS.SSS一部分,在这里看到:http://stackoverflow.com/questions/17821601/set-time-to-000000 – Berger
代替做一个新的Date()'得到一个'Calendar'实例,并将分钟和秒设为0. – Sachin
所以实际上你想要将y我们的日期时间分辨率?如果时间是5.59.59,该怎么办? – leonbloy