引言
想用jmeter获取最近几个月或最近一段时间时间,而Java Calendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单。由此百度到了Java Calendar 类的时间操作的一些文章。
相关原文地址如下:
http://blog.csdn.net/joyous/article/details/9630893
http://chamcon.iteye.com/blog/2144433
调试
在此结合jmeter进行调试:
如想获取“9个月后和4个月前的时间”或“获取50分钟后和50分钟前的时间”,则具体代码如下:
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
//显示当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
System.out.println("当前时间:" + sdf.format(now));
log.info("当前时间为:"+sdf.format(now));
//获取9个月后和4个月前的时间
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MONTH, 9);//9个月后的时间
log.info("3个月后的时间为:"+sdf.format(nowTime.getTime()));
Calendar nowTime2 = Calendar.getInstance();
nowTime2.add(Calendar.MONTH, -4);//4个月前的时间
log.info("3个月前的时间为:"+sdf.format(nowTime2.getTime()));
//获取50分钟后和50分钟前的时间
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE, 30);//30分钟后的时间
log.info("30分钟后的时间为:"+sdf.format(nowTime.getTime()));
Calendar nowTime2 = Calendar.getInstance();
nowTime2.add(Calendar.MINUTE, -30);//30分钟前的时间
log.info("30分钟前的时间为:"+sdf.format(nowTime2.getTime()));
运行结果如下:
扩展
对于Java Calendar 类的时间操作的其他用法也进行了尝试,具体代码如下:
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
//显示当前时间
String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());
log.info("当前时间为:"+str);
// 创建 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 显示年份
int year = calendar.get(Calendar.YEAR);
log.info("year is = " + String.valueOf(year));
// 显示月份 (从0开始, 实际显示要加一)
/*
* 在获取月份时,Calendar.MONTH + 1 的原因:
* Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。
* 而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们需要+1。
*/
int month = calendar.get(Calendar.MONTH);
log.info("month is = " + (month+1));
// 本周几 (实际显示要-1)
/*
* 在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因:
* Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
* 有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
看下表的返回值
*/
//一周第一天是否为星期天
boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
//获取周几
int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
//若一周第一天为星期天,则-1
if(isFirstSunday){
weekDay = weekDay - 1;
if(weekDay == 0){
weekDay = 7;
}
}
log.info("weekDay is = " + (weekDay));
// 今年的第 N 天
int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
log.info("DAY_OF_YEAR is = " + DAY_OF_YEAR);
// 本月第 N 天
int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
log.info("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));
// 3小时以后
calendar.add(Calendar.HOUR_OF_DAY, 3);
int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
log.info("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);
// 当前分钟数
int MINUTE = calendar.get(Calendar.MINUTE);
log.info("MINUTE = " + MINUTE);
// 15 分钟以后
calendar.add(Calendar.MINUTE, 15);
MINUTE = calendar.get(Calendar.MINUTE);
log.info("MINUTE + 15 = " + MINUTE);
// 30分钟前
calendar.add(Calendar.MINUTE, -30);
MINUTE = calendar.get(Calendar.MINUTE);
log.info("MINUTE - 30 = " + MINUTE);
// 格式化显示
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
log.info(str);
// 重置 Calendar 显示当前时间
calendar.setTime(new Date());
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
log.info(str);
// 创建一个 Calendar 用于比较时间
Calendar calendarNew = Calendar.getInstance();
// 设定为 5 小时以前,后者大,显示 -1
calendarNew.add(Calendar.HOUR, -5);
log.info("时间比较:" + calendarNew.compareTo(calendar));
// 设定7小时以后,前者大,显示 1
calendarNew.add(Calendar.HOUR, +7);
log.info("时间比较:" + calendarNew.compareTo(calendar));
// 退回 2 小时,时间相同,显示 0
calendarNew.add(Calendar.HOUR, -2);
log.info("时间比较:" + calendarNew.compareTo(calendar));
运行结果如下: