1. 如何獲取時間
Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化: // 字符串轉時間 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") Date date = format.parse(str) // 時間轉字符串 String str = format.format(date) Calendar rightNow = Calendar.getInstance();//获得当前时间 public class LearnTimeDemo { public static void main(String[] args) { //获得系统时间,一般用long类型的,得到此事件,currentTimeMillis()方法精确到毫秒 long TimeNow = System.currentTimeMillis(); Date date=new Date(TimeNow); //用Date类来转化这个时间 Calendar calendar=Calendar.getInstance(); //获得此刻的时间 System.out.println("Calendar获得的时间"+calendar.getTime()); } }
2. 用Calendar类提供的方法获取年、月、日、时、分、秒
int year = cal.get(Calendar.YEAR); // 年 int month = cal.get(Calendar.MONTH) + 1; // 月 默认是从0开始 即1月获取到的是0 int day = cal.get(Calendar.DAY_OF_MONTH); // 日,即一个月中的第几天 int hour = cal.get(Calendar.HOUR_OF_DAY); // 小时 int minute = cal.get(Calendar.MINUTE); // 分 int second = cal.get(Calendar.SECOND); // 秒
3. 使用Calendar類計算時間
3.1 计算相差天数 计算二个时间间隔天数,保留整数
Calendar cal = Calendar.getInstance(); cal.setTime(date1); long time1 = cal.getTimeInMillis(); cal.setTime(date2); long time2 = cal.getTimeInMillis(); long between_days = (time2 - time1) / (1000 * 3600 * 24); Integer count = Integer.parseInt(String.valueOf(between_days));
3.2 计算相差天数 计算二个时间间隔天数,保留一位小数
long timeout = endDate.getTime() - startDate.getTime(); double quot = 0.0; quot = ((double) timeout) / 1000 / 60 / 60 / 24; DecimalFormat formater = new DecimalFormat(); formater.setMaximumFractionDigits(1); // 用于设置数字的小数部分所允许的最大位数 formater.setGroupingSize(0); formater.setRoundingMode(RoundingMode.FLOOR); // 设置舍入模式 String retQuot = formater.format(quot); setGroupingSize(): 括号中放分隔长度,比如放3,则原数字串每小数点前每过三位为一组。 setGroupingUsed(): 用于确定是否进行对数字串进行分组。比如括号里放false,则表示不允许数字串进行分组。 // RoundingMode 用法 RoundingMode.CEILING:取右边最近的整数 RoundingMode.DOWN:去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整 RoundingMode.FLOOR:取左边最近的正数 RoundingMode.HALF_DOWN:五舍六入,负数先取绝对值再五舍六入再负数 RoundingMode.HALF_UP:四舍五入,负数原理同上 RoundingMode.HALF_EVEN:这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入
3.3 Java中 DecimalFormat 用法详解
// DecimalFormat是**NumberFormat十进制数字格式的具体子类 public class TestNumberFormat{ public static void main(String[]args){ double pi = 3.1415927; //圆周率 //取一位整数 System.out.println(new DecimalFormat("0").format(pi)); //3 //取一位整数和两位小数 System.out.println(new DecimalFormat("0.00").format(pi)); //3.14 //取两位整数和三位小数,整数不足部分以0填补。 System.out.println(new DecimalFormat("00.000").format(pi));// 03.142 //取所有整数部分 System.out.println(new DecimalFormat("#").format(pi)); //3 //以百分比方式计数,并取两位小数 System.out.println(new DecimalFormat("#.##%").format(pi)); //314.16% long c =299792458; //光速 //显示为科学计数法,并取五位小数 System.out.println(new DecimalFormat("#.#####E0").format(c)); //2.99792E8 //显示为两位整数的科学计数法,并取四位小数 System.out.println(new DecimalFormat("00.####E0").format(c)); //29.9792E7 //每三位以逗号进行分隔。 System.out.println(new DecimalFormat(",###").format(c)); //299,792,458 //将格式嵌入文本 System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c)); } } //创建一个默认的通用格式 NumberFormat和DecimalFormat是线程不安全的 NumberFormat numberFormat = NumberFormat.getInstance(); DecimalFormat numberDecimalFormat; //捕捉异常,以防强制类型转换出错 try { //强制转换成DecimalFormat numberDecimalFormat = (DecimalFormat) numberFormat; //保留小数点后面三位,不足的补零,前面整数部分 每隔四位 ,用 “,” 符合隔开 numberDecimalFormat.applyPattern("#,####.000"); //设置舍入模式 为DOWN,否则默认的是HALF_EVEN numberDecimalFormat.setRoundingMode(RoundingMode.DOWN); //设置 要格式化的数 是正数的时候。前面加前缀 numberDecimalFormat.setPositivePrefix("Prefix "); System.out.println("正数前缀 "+numberDecimalFormat.format(123456.7891)); //设置 要格式化的数 是正数的时候。后面加后缀 numberDecimalFormat.setPositiveSuffix(" Suffix"); System.out.println("正数后缀 "+numberDecimalFormat.format(123456.7891)); //设置整数部分的最大位数 numberDecimalFormat.setMaximumIntegerDigits(3); System.out.println("整数最大位数 "+numberDecimalFormat.format(123456.7891)); //设置整数部分最小位数 numberDecimalFormat.setMinimumIntegerDigits(10); System.out.println("整数最小位数 "+numberDecimalFormat.format(123456.7891)); //设置小数部分的最大位数 numberDecimalFormat.setMaximumFractionDigits(2); System.out.println("小数部分最大位数 "+numberDecimalFormat.format(123.4)); //设置小数部分的最小位数 numberDecimalFormat.setMinimumFractionDigits(6); System.out.println("小数部分最小位数 "+numberDecimalFormat.format(123.4)); }catch (Exception e){ e.printStackTrace(); }
4. 将日期向后延长
// sourceDate 源日期 // number 延长几天 Calendar calendar = new GregorianCalendar(); calendar.setTime(sourceDate); calendar.add(calendar.DATE, number); Date result = calendar.getTime();
5. 获取指定日期所在月份指定時間 时间格式yyyyMMdd
5.1 指定日期所在月份开始的时间
SimpleDateFormat aDateFormat = new SimpleDateFormat("yyyy/MM/dd"); Calendar c = Calendar.getInstance(); c.setTime(date); // 设置为1号,当前日期既为本月第一天 c.set(Calendar.DAY_OF_MONTH, 1); // 将小时至0 c.set(Calendar.HOUR_OF_DAY, 0); // 将分钟至0 c.set(Calendar.MINUTE, 0); // 将秒至0 c.set(Calendar.SECOND, 0); // 将毫秒至0 c.set(Calendar.MILLISECOND, 0); // 获取本月第一天的时间 date = aDateFormat.format(c.getTime());
5.2 指定日期所在月份结束的时间
SimpleDateFormat aDateFormat = new SimpleDateFormat("yyyy/MM/dd"); Calendar c = Calendar.getInstance(); c.setTime(date); // 设置为当月最后一天 c.set(Calendar.DAY_OF_MONTH,c.getActualMaximum(Calendar.DAY_OF_MONTH)); // 将小时至23 c.set(Calendar.HOUR_OF_DAY, 23); // 将分钟至59 c.set(Calendar.MINUTE, 59); // 将秒至59 c.set(Calendar.SECOND, 59); // 将毫秒至999 c.set(Calendar.MILLISECOND, 999); // 获取本月最后一天的时间 date = aDateFormat.format(c.getTime());
6. 判断一个时间是否在一个时间段内
Calendar date = Calendar.getInstance(); date.setTime(nowTime); // 当前时间 Calendar begin = Calendar.getInstance(); begin.setTime(beginTime); // 开始时间 Calendar end = Calendar.getInstance(); end.setTime(endTime); // 结束时间 b = date.after(begin) && date.before(end);