目录
1.SimpleDateFormat类
new Date() 获取到当前系统时间: Mon Apr 25 17:21:28 CST 2022
进行转换: yyyy-MM-dd hh:mm:ss 日期字符串
用户输入Scanner, 输入日期只能是一个字符串 "1993-12-12" 需要把String转换为Date
使用SimpleDateFormat: 进行日期与String之间转换, 位于java.text包下: 父类: 抽象类 DateFormat
创建对象 构造方法
pattern: 日期格式表达式字符串: 比如: yyyy-MM-dd hh:mm:ss
日期每一部分的 标识符:
常见的日期格式字符串:
常用方法:
1.把日期转换为字符串
String format(Date 日期) 从DateFormat继承的
2.把指定日期格式字符串转换为日期
Date parse(String s) 抛一个ParseException
代码实例
public static void main(String[] args) {
Date now = new Date(); //得到当前系统时间
System.out.println(now); //Sat Apr 09 09:50:59 CST 2022
//把日期转换为指定格式: yyyy-MM-dd 2022-04-09
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//调用format() 方法进行转换
String dateStr = sdf.format(now);
System.out.println(dateStr); //2022-04-09
Scanner input = new Scanner(System.in);
System.out.println("请输入您的出生日期(yyyy-MM-dd):");
String birthdayStr = input.next();
//把birthdayStr字符串转换为Date类型
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
//调用parse()
try {
Date birthday = sdf1.parse(birthdayStr);
System.out.println(birthday);
} catch (ParseException e) {
// 字符串的格式与SimpleDateFormat的pattern匹配,抛这个异常
e.printStackTrace();
}
}
2.Calendar类
Calendar 是抽象类,位于java.util包: 子类: GregorianCalendar 设置年,月,日, 时,分秒
获取Calendar类的实例的方法:
创建对象:
1) 调用子类的构造方法创建Calendar对象
2) 调用Calendar类的static方法: static Calendar getInstance(); 推荐
代码实例:
import java.util.Calendar;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test {
public static void main(String[] args) {
//两个方法创建对象
Calendar objCalendar = Calendar.getInstance();
//Calendar objCalendar = new GregorianCalendar();
// 显示 Date 和 Time 的各个组成部分
System.out.println("Date 和 Time 的各个组成部分: ");
System.out.println("年: " + objCalendar.get(Calendar.YEAR));
// 一年中的第一个月是JANUARY,它为0
//定义一个月的初始化变量
int month = 0;
//实际显示的月份为 objCalendar.get(Calendar.MONTH )+1
month = objCalendar.get(Calendar.MONTH )+1;
System.out.println("月: " + month);
System.out.println("日: " + objCalendar.get(Calendar.DATE));
// Calendar的星期常数从星期日Calendar.SUNDAY是1,
//到星期六Calendar.SATURDAY是7
System.out.println("星期: " + (objCalendar.get(Calendar.DAY_OF_WEEK)));
System.out.println("小时: " + objCalendar.get(Calendar.HOUR_OF_DAY));
System.out.println("分钟: " + objCalendar.get(Calendar.MINUTE));
System.out.println("秒: " + objCalendar.get(Calendar.SECOND));
}
}
常用方法
1.获取指定日期部分的值
int get(int field) //field 日期部分
2.设置日期
3.日期相加
add(int field, int amount)
4.Calendar对象转换Date
Calendar的getTime() //把Calendar对象转换Date
Date的getTime() 获取日期的毫秒值
5.把Date转换为Calendar
setTime(Date date
import java.util.Calendar;
import java.util.Date;
public class Test2 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
//使用给定的 Date 设置此 Calendar 的时间
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 8);
System.out.println("当前时间日设置为8后,时间是:" + calendar.getTime());
calendar.add(Calendar.HOUR, 2);
System.out.println("当前时间加2小时后,时间是:" + calendar.getTime());
calendar.add(Calendar.MONTH, -2);
System.out.println("当前日期减2个月后,时间是:" + calendar.getTime());
}
}
3.BigInteger类和BigDecemal
int.long,double 存的位数有限, double还有精度问题: 0.1+0.2 !=0.3
解决上面问题: 提供BigInteger,BigDecimal 存放无限大小的数字, BigDecimal 解决小数精度问题
位于 java.math包
创建对象
BigInteger(String val)
BigDecimal(String val)
常用方法
加减乘除:
import java.math.BigDecimal;
import java.math.BigInteger;
public class Test{
public static void main(String[] args) {
BigInteger bi1 = new BigInteger("2343243535353");
BigInteger bi2 = new BigInteger("1111111111111");
System.out.println("加法运算:"+bi1.add(bi2));
System.out.println("减法运算:"+bi1.subtract(bi2));
System.out.println("乘法运算:"+bi1.multiply(bi2));
System.out.println("除法运算:"+bi1.divide(bi2));
System.out.println("求余运算:"+bi1.remainder(bi2));
//大小数
double f = 111231.5585;
BigDecimal bd = new BigDecimal(f);
System.out.println("加法运算:"+bd.add(bd));
System.out.println("减法运算:"+bd.subtract(bd));
System.out.println("乘法运算:"+bd.multiply(bd));
System.out.println("除法运算:"+bd.divide(bd));
System.out.println("求余运算:"+bd.remainder(bd));
}
}
四舍五入:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Test2 {
public static void main(String[] args) {
// 大小数
double f = 111231.5585;
BigDecimal bd = new BigDecimal(f);
// 这里可以做四舍五入,假定小数点后面要保留2位有效数字
double res = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("res:" + res);
// 第二种四舍五入方法
// 这里的参数,
// #表示任意位数的数字,也可以改为000,三个0表示至少有三位,不足的,就补0
// 后面的点表示小数点,
// 00表示小数点后面保留两位有效数字
DecimalFormat df = new DecimalFormat("#.00");
System.out.println("第二种方式:" + df.format(f));
// 第三种
System.out.println("第三种:" + String.format("%.3f", f));
// 第四种
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(3);
System.out.println("第四种:" + nf.format(f));
}
}