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