Java基础之常用工具类

Java常用类之Date

 我们一般说的Date指的是util下的Date类:

1.java.util.Date的构造器

 

当使用Date(int year,int month,int day)构造器时,有偏差而且已经过时,不建议使用

        Date date=new Date(2021,10,6);
		System.out.println(date);
		Date date1=new Date(2021-1900,10-1,6);
		System.out.println(date1);

2.java.util.Date的getTime()方法:返回1970-01-01 00:00:00至今的时间差(单位:毫秒)--也叫作:时间戳

        Date date=new Date();
		System.out.println(date.getTime());

3.java.util.Date的toString()方法:

        Date date=new Date();
		System.out.println(date.getTime());
		System.out.println(date.toString());

  

4.java.sql.Date的构造器

		java.sql.Date date=new java.sql.Date(System.currentTimeMillis());
		System.out.println(date.toString());

 

 5.java.util.Date转化成java.sql.Date

        Date date=new Date();
		java.sql.Date sqlDate=new java.sql.Date(date.getTime());

Java常用类之Calendar

 首先Calendar是个抽象类,所以没有办法实例化

①使用它的直接子类-->GregorianCalendar

②使用它的getInstance()方法返回一个GregorianCalendar的实例

具体使用:

        Calendar calendar=Calendar.getInstance(); //获取GregorianCalendar的实例
			
		System.out.println(calendar.get(Calendar.DAY_OF_WEEK)-1);//返回星期,星期是从1开始,          即周日是1
		
		System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//返回当前月份的号数
		
		System.out.println(calendar.get(Calendar.MONTH)+1);//返回月份,一月份为0
		
		System.out.println(calendar.get(Calendar.YEAR)); //返回年份
		
		System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//返回从1月1号至现在的天数
		
		System.out.println("********************************");
		
		//add()方法
		calendar.add(calendar.get(Calendar.DAY_OF_MONTH), 1); //当前号数加1
		System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
		calendar.add(calendar.get(Calendar.YEAR), -1);
		System.out.println(calendar.get(Calendar.YEAR));//当前号数减1
        Calendar cl=Calendar.getInstance();
		//getTime():获取当前的时间
		System.out.println(cl.getTime());
		//setTime():设置时间
		cl.set(2000,1-1,21 );
		System.out.println(cl.getTime());

注意细节:

①星期天是1,星期一是2,....,星期六是7

②一月份是0,二月份是1,.....,十二月份是11

Java常用类之SimpleDateFormat 

        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		Date date=new Date();
		String time=format.format(date);  //format():格式化
		System.out.println(time);
		Date d=format.parse(time);  //parse():解析
		System.out.println(d);

Java常用类之Instant

Instant是java8中的新特性,类似于java.util.Date类

        //实例化
		Instant ins=Instant.now();
		System.out.println(ins);  //返回的是格林威治时间
		
		OffsetDateTime time=ins.atOffset(ZoneOffset.ofHours(8)); //返回东8区的时间也就是北京时间
		System.out.println(time);
		
		System.out.println(ins.toEpochMilli()); //返回1970-01-01 00:00:00至今的毫秒数

Java常用类之LocaDate、LocalTime、LocalDateTime

优点:①不可变性②不偏移③线程安全

        //实例化
		LocalDate date=LocalDate.now();
		System.out.println(date);
		LocalTime time=LocalTime.now();
		System.out.println(time);
		LocalDateTime dateTime=LocalDateTime.now();
		System.out.println(dateTime);
		System.out.println("************************************");
		//of:设置时间
		LocalDateTime dateTime1=dateTime.of(2022, 10, 1, 1, 21, 59); //设置时间,具有不可变性
		System.out.println(dateTime);
		System.out.println(dateTime1);
		System.out.println("************************************");
		//getXxx:获取属性
		System.out.println(dateTime.getYear());
		System.out.println(dateTime.getMonth());
		System.out.println(dateTime.getDayOfMonth());
		System.out.println("************************************");
		//plusXxx:增加
		LocalDateTime dateTime2=dateTime.plusMonths(1);
		System.out.println(dateTime.getMonth());
		System.out.println(dateTime2.getMonth());
		System.out.println(dateTime.getMonthValue());
		System.out.println(dateTime2.getMonthValue());
		System.out.println("************************************");
		//minusXxx:减
		LocalDateTime dateTime3=dateTime.minusDays(6);
		System.out.println(dateTime.getDayOfMonth());
		System.out.println(dateTime3.getDayOfMonth());

Comparable接口和Comparator类

作用:使对象具有可比较性

说明:

1.String、包装类实现了Comparable接口,实现了compareTo方法,进行自然排序(从小到大)

2.compareTo(Object obj)实现的规则:

        ①this.对象>obj.对象,返回正整数

        ②this.对象<obj.对象,返回负整数

        ③this.对象=obj.对象,返回0

3.自定义类实现Comparable接口,可在compareTo方法中自定义排序规则

import org.junit.Test;


public class DateTest {
	/*
	 * Comparable接口:自然排序
	 * 1.String、包装类都实现了Comparable接口中的compareTo(Object obj)方法,实现自然排序(从小到大)
	 * 2.重写compareTo(obj)方法的规则:
	 * 		①this对象>obj对象,返回正整数
	 * 		②this对象<obj对象,返回负整数
	 * 		③this对象=obj对象,返回0
	 * 3.自定义类中实现Comparable接口,在compareTo方法中自定义排序规则
	 */
	@Test
	public void test1() throws ParseException {
		Person [] arr=new Person[5];
		arr[0]=new Person("小王",18);
		arr[1]=new Person("小黄",17);
		arr[2]=new Person("小付",18);
		arr[3]=new Person("小瞿",21);
		arr[4]=new Person("小何",22);
		Arrays.sort(arr);
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+"\t");
		}
	}

}
class Person implements Comparable{
	private String name;
	private int age;
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	@Override
	public int compareTo(Object o) {
		// TODO 自动生成的方法存根
		if(o instanceof Person) {
			Person p=(Person)o;
			if(this.age>p.age) {
				return 1;
			}else if(this.age<p.age) {
				return -1;
			}else {
				return this.name.compareTo(p.name);
			}
			
		}else {
			throw new RuntimeException("输入数据类型不一致");
		}
	}
	
}
public class DateTest {
	@Test
	public void test1() throws ParseException {
		Person [] arr=new Person[5];
		arr[0]=new Person("小王",18);
		arr[1]=new Person("小黄",17);
		arr[2]=new Person("小付",18);
		arr[3]=new Person("小瞿",21);
		arr[4]=new Person("小何",22);
		Arrays.sort(arr,new Comparator() {

			@Override
			public int compare(Object o1, Object o2) {
				if(o1 instanceof Person && o2 instanceof Person) {
					Person p1=(Person)o1;
					Person p2=(Person)o2;
					if(p1.getAge()>p2.getAge()) {
						return -1;
					}else if(p1.getAge()<p2.getAge()) {
						return 1;
					}else {
						return -p1.getName().compareTo(p2.getName());
					}
				}else{
					throw new RuntimeException("输入的数据类型不一致");
				}
				
			}
			
		});
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+"\t");
		}
	}

}
class Person {
	private String name;
	private int age;
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
//	@Override
//	public int compareTo(Object o) {
//		// TODO 自动生成的方法存根
//		if(o instanceof Person) {
//			Person p=(Person)o;
//			if(this.age>p.age) {
//				return 1;
//			}else if(this.age<p.age) {
//				return -1;
//			}else {
//				return this.name.compareTo(p.name);
//			}
//			
//		}else {
//			throw new RuntimeException("输入数据类型不一致");
//		}
//	}
	
}

大数操作之BigInteger、BigDecimal

Java高新技术——大数操作(BigInteger、BigDecimal)_李春春的专栏-CSDN博客_biginteger

@Test
	public void test1() throws ParseException {
		BigInteger big1=new BigInteger("865432865432");
		BigInteger big2=new BigInteger("765434765432");
		System.out.println("BigInteger加法:"+big1.add(big2));
		System.out.println("BigInteger减法:"+big1.subtract(big2));
		System.out.println("BigInteger乘法:"+big1.multiply(big2));
		System.out.println("BigInteger除法:"+big1.divide(big2));
		BigInteger[] b= big1.divideAndRemainder(big2);
		System.out.println("BigInteger取余的商:"+b[0]+"\t余数:"+b[1]);
	}
public class DateTest {
	
		@Test
		public void test1() {
			System.out.println("BigDecimal的加法:"+MyMath.round(MyMath.add(10.25, 3.33), 1));
			System.out.println("BigDecimal的减法:"+MyMath.round(MyMath.sub(10.25, 3.33), 2));
			System.out.println("BigDecimal的乘法:"+MyMath.round(MyMath.mul(10.25, 3.33), 3));
			System.out.println("BigDecimal的除法:"+MyMath.div(10.25, 3.33,4));
		}
}
class MyMath{
	public static  double add(double d1,double d2) {
		BigDecimal b1=new BigDecimal(d1);
		BigDecimal b2=new BigDecimal(d2);
		return b1.add(b2).doubleValue();
	}
	public static double sub(double d1,double d2) {
		BigDecimal b1=new BigDecimal(d1);
		BigDecimal b2=new BigDecimal(d2);
		return b1.subtract(b2).doubleValue();
	}
	public static double div(double d1,double d2,int len) {
		BigDecimal b1=new BigDecimal(d1);
		BigDecimal b2=new BigDecimal(d2);
		return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	public static double mul(double d1,double d2) {
		BigDecimal b1=new BigDecimal(d1);
		BigDecimal b2=new BigDecimal(d2);
		return  b1.multiply(b2).doubleValue();
	}
	public static double round(double d,int len) { //四舍五入
		BigDecimal b=new BigDecimal(d);
		BigDecimal b1=new BigDecimal(1);
		return b.divide(b1, len, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}
/*
 * 16进制数:0x9AF
 * 多组输入16进制数,将其转化为10进制数
 */
public class DateTest {
	public static void main(String[] args) {
		//多组输入
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String len;
		try {
			while((len=br.readLine())!=null) {  // 7*16+10*1 112+10
				String str=len.substring(2);
				Integer i=Integer.parseInt(str, 16);
				System.out.println(i);
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}
//多组输入
		BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
		BigDecimal base=new BigDecimal("16");
		String len;
		try {
			while((len=buf.readLine())!=null){
				String str=len.substring(2);
				BigDecimal big=new BigDecimal("0");
				for(int i=0;i<str.length();i++) {
					char ch=str.charAt(str.length()-1-i);
					if('A'<=ch && 'F'>=ch) {
						BigDecimal b1=base.pow(i).multiply(new BigDecimal(Integer.toString(ch-'A'+10)));
						big=big.add(b1);
					}else {
						BigDecimal b2=base.pow(i).multiply(new BigDecimal(Character.toString(ch)));
						big=big.add(b2);
					}
				}
				System.out.println(big);
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值