目录
一、Math类
不过多赘述,比较常用,看下图:
二、System类
public static void main(String[] args){
//终止当前运行的java虚拟机
//该参数作状态码按惯例,非零状态代码表示异常终止
//System.exit(0); //人为的终止虚拟机(不要使用)
//System.currentTimeMillis是时间从1970.01.01到现在的毫秒值,返回值是long
long time = System.currentTimeMillis();
System.out.println(time);
for(int i = 0; i < 100000; i++){
System.out.println("输出了"+i);
}
long time2 = System.currentTimeMillis();
System.out.println((time2-time)/1000.0+"s"); //计算中间程序运行了多久
}
三、Runtime类
public static void main(String[]args)throwsIOException,InterruptedException{
Runtime r = Runtime.getRuntime();
//终止当前运行的虚拟机
//r.exit(0);
//获取虚拟机能够使用的处理器数
System.out.println(r.availableProcessors());//16
//返回java虚拟机中内存的总量
System.out.println(r.totalMemory()/1024.0/1024.0+"MB");
//返回java虚拟机中可用的内存量
System.out.println(r.freeMemory()/1024.0/1024.0+"MB");
//启动某个程序
Process p = r.exec("E:\\bili\\bilibili\\哔哩哔哩.exe");
Thread.sleep(5000);//让程序在这里暂停5秒后往下走
//关闭程序
p.destroy();
}
四、BigDecimal类
public static void main(String[] args) {
double a = 0.1;
double b = 0.3;
double c = a + b;
System.out.println("c = " + c); // c = 0.4
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(b);
BigDecimal c1 = a1.add(b1);//加
System.out.println("c1 = " + c1); //c1 = 0.4
BigDecimal c2 = a1.divide(b1,2, RoundingMode.HALF_UP);//除
System.out.println("c2 = " + c2); //c2 = 0.33
BigDecimal c3 = a1.subtract(b1);//减
System.out.println("c3 = " + c3); // -0.2
BigDecimal c4 = a1.multiply(b1);//乘
System.out.println("c4 = " + c4); // 0.03
double k = c2.doubleValue();//把bigdecimal转变成double类型的
System.out.println("k = " + k); // k = 0.33
}
五、Date类
public static void main(String[]args){
//代表此刻的时间
Date d1 = new Date();
System.out.println(d1);
//拿到当前方法
System.out.println();
Long time = d1.getTime(); //以毫秒为单位,返回从1970.1.1 00:00:00到此刻的毫秒值
//两秒之后的时间
time += 2*1000;
//传入时间打印时间方法一(用构造器)
Date d2 = new Date(time);
System.out.println(d2);
System.out.println();
//传入时间打印时间方法二(用date里的方法)
Date d3 = new Date();
d3.setTime(time); //转换
System.out.println(d3);
}
六、SimpleDateFormat
public static void main(String[] args) throws ParseException {
Date d1 = new Date();
System.out.println(d1); //Sat Sep 07 16:59:40 CST 2024
System.out.println();
long time = d1.getTime();
SimpleDateFormat s1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
System.out.println(s1.format(time)); //2024年09月07日 16:59:40 周六 下午
System.out.println("----------------------------------------------------------");
String str = new String("2024-08-05 23:51:25 周一 下午");
SimpleDateFormat datestr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE a");
Date d2 = datestr.parse(str);
Date d3 = datestr.parse("2023-07-13 07:08:09 周二 上午");
System.out.println(d2); //Mon Aug 05 23:51:25 CST 2024
System.out.println(d3); //Thu Jul 13 07:08:09 CST 2023
long d22 = d2.getTime();
long d33 = d3.getTime();
System.out.println(s1.format(d22));//2024年08月05日 23:51:25 周一 下午
System.out.println(s1.format(d33)); //2023年07月13日 07:08:09 周四 上午
}
七、Calendar
Calendar.getInstance()
是Calendar
类的一个静态方法,它返回一个Calendar
类的实例,这个实例代表了当前的日期和时间。这个方法通常会根据默认的时区和语言环境来创建一个GregorianCalendar
实例(GregorianCalendar
是Calendar
的一个具体实现,代表公历系统)。- 注意,月份是从
0
开始计数的,所以当我们打印月份时,需要将其加1
以得到通常意义上的月份。
public static void main(String[] args) {
//因为Calendar是抽象方法 所以调取getInstance()获取静态方法
Calendar cld = Calendar.getInstance();
System.out.println(cld); //很长的打印...
//获取日历的某个信息
int year = cld.get(Calendar.YEAR);
int day = cld.get(Calendar.DAY_OF_YEAR);
System.out.println("year = " + year); //year = 2024
System.out.println("day = " + day); //day = 251
//拿到日历中记录的日期对象
Date d = cld.getTime();
System.out.println(d); //Sat Sep 07 17:15:16 CST 2024
//拿到时间毫秒值
long time = cld.getTimeInMillis();
System.out.println(time);
//修改日历中的信息
cld.set(Calendar.MONTH,7);
cld.set(Calendar.DAY_OF_YEAR,260);
System.out.println(cld);
//为某个信息增加减少
cld.add(Calendar.DAY_OF_YEAR, 100);
cld.add(Calendar.DAY_OF_YEAR,-100);
cld.add(Calendar.DAY_OF_MONTH,5);
System.out.println(cld);
}
Calendar 和 Date 类 的区别:
Date
是一个具体的类,可以直接实例化,用于表示特定的瞬间,精确到毫秒。Calendar
是一个抽象类,不能直接实例化。它提供了一个抽象的框架,用于操作日期和时间的各个字段(如年、月、日、小时等),具体的日历系统由其子类实现,如GregorianCalendar
。Date
类的 API 相对简单,但不够灵活,因为它只提供了一些基本的方法来设置和获取日期和时间。Calendar
类提供了更多的方法来操作日期和时间的各个部分,使得日期和时间的处理更加灵活和方便。
八、JDK8新增的时间API(important)
旧的 Date 和 Calendar 也可以用,但是建议用新的API
接下来是如何使用这些新增的API
1. LocalDate
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
System.out.println(ld); //2024-09-07
//获取对象的信息
//年
int year = ld.getYear(); //2024
//月
int month = ld.getMonthValue();//9
//日
int day = ld.getDayOfMonth();//7
//一年中的第几天
int dayofYear = ld.getDayOfYear(); //251
//一周的第几天
int dayofWeek = ld.getDayOfWeek().getValue(); //6
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(dayofYear);
System.out.println(dayofWeek);
System.out.println("---------------------");
//修改日期
LocalDate ld1 = ld.withYear(2099);
LocalDate ld2 = ld.withMonth(7);
System.out.println(ld); //(明天回校咯欲哭无泪)2024-09-07 注意后面改的不会导致原来是日期变化
System.out.println(ld1); //2099-09-07
System.out.println(ld2); //2024-07-07
//加法
LocalDate ld3 = ld.plusYears(20);
LocalDate ld4 = ld.plusMonths(2);
System.out.println(ld3);
System.out.println(ld4);
//减法
LocalDate ld7 = ld.minusYears(20);
LocalDate ld8 = ld.minusMonths(2);
System.out.println(ld7);
System.out.println(ld8);
//获取指定日期的LocalDate对象
LocalDate l5 = LocalDate.of(2025,05,02);
LocalDate l6 = LocalDate.of(2025,05,02);
//判断
System.out.println(l5.equals(l6));
System.out.println(l5.isAfter(ld));
System.out.println(ld.isBefore(l6));
}
2.LocalTime
3. LocalDateTime
4.ZoneId
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.TimeZone;
public static void main(String[] args) {
ZoneId zid = ZoneId.systemDefault();
System.out.println(zid); //Asia/Shanghai
//获取java支持的全部id
System.out.println(ZoneId.getAvailableZoneIds());
//把某个时区封装成ZoneId对象
ZoneId zoneId1 = ZoneId.of("Europe/London");
//ZoneateTime :带时区的时间
//获取某个时区的ZoneDateTime对象
ZonedDateTime now = ZonedDateTime.now(zoneId1);
System.out.println(now); //2024-09-07T10:50:09.603952600+01:00[Europe/London]
//获取世界标准时间
ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
System.out.println(now1); //2024-09-07T09:50:09.605737600Z
//获取系统默认时间
ZonedDateTime now2 = ZonedDateTime.now();
System.out.println(now2); //2024-09-07T17:50:09.605737600+08:00[Asia/Shanghai]
//关于Calendar 对时区的支持 但是Calendar是可变对象 所以不用
//Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(zoneId1));
}
5.Instant
上图有误:plulsSeconds 、plusNanos是增加时间系列方法,equals、isBefore、isAfter是判断系列的方法
public static void main(String[] args) {
//拿到标准时间
Instant ins = Instant.now();//不可变对象
System.out.println(ins); //2024-09-07T10:06:24.348826500Z
//获取从1970年走到现在的毫秒值
long time = ins.getEpochSecond();
System.out.println(time);
//获取不到一秒的数值
long nano = ins.getNano();
System.out.println(nano);
Instant ins1 = ins.plusMillis(111);
System.out.println(ins); //2024-09-07T10:06:24.348826500Z 不变
System.out.println(ins1);//2024-09-07T10:06:24.459826500Z
}
6.DateTimeFormatter
对比一下DateTimeFormatter和 LocalDateTime
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
String fmt = dtf.format(now);//正向格式化 格式化时间对象
System.out.println(fmt);
//反向格式化
//格式化时间
String fmt2 = now.format(dtf);
System.out.println(fmt2);
//解析时间
String dateStr = "2099年11月11日 12:12:12";
LocalDateTime ldt = LocalDateTime.parse(dateStr,dtf);
System.out.println(ldt);
}
7. Period
public static void main(String[]args){
LocalDate start=LocalDate.of(2024,8,15);
LocalDate end=LocalDate.of(2025,8,15);
//传入两个参数
Period period=Period.between(start,end);
//计算年月日的相隔时间
System.out.println(period.getYears());//1
System.out.println(period.getMonths());//0 直接相减
System.out.println(period.getDays());//0 如上
}
8. Duration
public static void main(String[]args){
LocalDateTime start=LocalDateTime.of(2024,8,15,15,25,25,25);
LocalDateTime end=LocalDateTime.of(2025,8,15,15,25,25,25);
Duration duration = Duration.between(start,end);
System.out.println(duration.toDays());
System.out.println(duration.toHours());
System.out.println(duration.toMinutes());
System.out.println(duration.toSeconds());
System.out.println(duration.toMinutes());
System.out.println(duration.toNanos());
}