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);