l参考文章 java获取当前时间最接近的刻度时间(00,15,30,45)_蜗牛程序员的博客-CSDN博客
有个需求需要传递参数,传15分钟粒度的时间,所以需要获取上一个整时刻和上上个整时刻。
比如当前时间:11:20,需要获取11:15和11:00
参数n表示前几个15分钟。
public String GetNearestN15MinutesDateByCurrentDate(int n){
// 日期字符串格式 :"2013-05-01 00:01:08"
Calendar calendar = Calendar.getInstance();//获取当前时间
int minute = calendar.get(Calendar.MINUTE);// 得到分钟
int count = 0;
if (minute != 0 && minute != 15 && minute != 30 && minute != 45) { //时间不为00,15,30,45的情况
for (int i = minute; i >= 0; i--) { //判断距离最近的00,15,30,45的分钟数
if (i % 15 == 0) {
break;
} else {
count++;
}
}
}
calendar.add(Calendar.MINUTE, -count - (n - 1) * 15); //获取最近的分钟
int year = calendar.get(Calendar.YEAR); //得到年
int month = calendar.get(Calendar.MONTH) + 1; //得到月
int day = calendar.get(Calendar.DAY_OF_MONTH);// 得到天
int hour = calendar.get(Calendar.HOUR_OF_DAY);// 得到小时
int min = calendar.get(Calendar.MINUTE);// 得到分钟
StringBuffer datebuffer = new StringBuffer();
datebuffer.append(year);
datebuffer.append("-");
if(month <10){
datebuffer.append("0"+month+"-");
}else{
datebuffer.append(month+"-");
}
if(day<10){
datebuffer.append("0"+day+" ");
}else{
datebuffer.append(day+" ");
}
if(hour <10){
datebuffer.append("0"+hour+":");
}else{
datebuffer.append(hour+":");
}
if(min<10){
datebuffer.append("0"+min+":");
}else{
datebuffer.append(min+":");
}
datebuffer.append("00");
System.out.println(datebuffer.toString());
return datebuffer.toString();
}
public static void main(String[] args){
new Q4().GetNearestN15MinutesDateByCurrentDate(1);
new Q4().GetNearestN15MinutesDateByCurrentDate(2);
}
试一下吧,有问题留言,好用点赞。
还有一种简单写法:
public static String getN15(int n){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
int minute = calendar.get(Calendar.MINUTE);
String d = sdf.format(new Date());
int min = (minute - minute % 15 - (n - 1) * 15);
calendar.set(Calendar.MINUTE, min);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
System.out.println(sdf.format(calendar.getTime()));
return sdf.format(calendar.getTime()) ;
}