常用类库( java.util、java.text)
java.util包中放置了Java开发过程中常用的工具类,如日期时间类,日历类等等
java.util包常用类
- Date
- Calendar及其子类
- 集合接口以及实现类
- 集合工具类
- 数组工具类等等
一、Date类
Date类表示特定的时间,可以精确到毫秒。
Date类的构造方法:
- Date() 无参构造方法
- Date(long time) 有长整形参数的构造方法
- 其他构造方法已经废弃不用
Date类常用方法:
- long getTime();返回1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
- String toString();将Date对象转换为字符串,默认的转换格式为:dow mon dd hh:mm:ss zzz yyyy
package com.changyongleiku.Date_1;
import java.util.Date;
public class Main {
public static void main(String[] args) {
//Date:时间 Data:数据
Date d = new Date();//获取当前时间
System.out.println(d);//Fri Jul 23 09:18:58 CST 2021
//表示自从标准基准时间(称为“历元(epoch)”,
// 即 1970 年 1 月 1 日 08:00:00 GMT)以来的指定毫秒数。
Date d_1 = new Date(1000);
System.out.println(d_1);//Thu Jan 01 00:00:01 CST 1970
//after 测试此日期是否在指定日期之后。
boolean aft = d.after(d_1);
System.out.println(aft);//true
//before 测试此日期是否在指定日期之前。
//compareTo 测试此日期是否在指定日期之前。
//equals 比较两个日期的相等性。
//getTime 返回自 1970 年 1 月 1 日 00:00:00 GMT
// 以来此 Date 对象表示的毫秒数。
long time = d.getTime();
System.out.println(time);//1627003589844
}
}
二、Calendar类及其子类
Calendar类
- java.util.Date类中获取当前年、月、日和将时间格式化以及将字符串类型的日期转换为Date对象的方法都已经被废弃。
- 如果想要获取Date对象的年、月、日、星期等操作,需要使用Calendar类以及其子类完成。
- Calendar是一个抽象类,它为获取和修改年、月、日、星期等日历字段提供了一系列的方法。
Calendar常用方法
- Calendar getInstance();返回一个Calendar对象
- void set(int field,int x);设置日历字段的值
- void get(int field);获取某个日历字段的值
- java.util.Date getTime();返回代表该日历对象的Date值
- void setTime(java.util.Date date);使用指定的Date设置该日历对象
- 常用的日历字段
- AM_PM 上午或者下午
- YEAR 年 MONTH 月 DATE 日 HOUR 12小时制 HOUR_OF_DAY 24小时制 MINUTE 分钟 SECOND 秒 MILLISECOND 毫秒
java.util.GregorianCalendar类
GregorianCalendar是Calendar的一个直接子类
-
提供了世界上大多数国家/地区使用的标准日历系统,即中国所谓的阳历或者公历
常用方法:
-
boolean isLeapYear(int year) 判断指定年份是不是闰年
-
void add(int field ,int x)为指定的日历字段增加值
package com.changyongleiku.Calendar_1;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class Main {
public static void main(String[] args) {
//Calender:日历 抽象类
GregorianCalendar gre = new GregorianCalendar();//获取当前时间
System.out.println(gre);//java.util.GregorianCalendar[time=1627003864538,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=6,WEEK_OF_YEAR=30,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=204,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=9,HOUR_OF_DAY=9,MINUTE=31,SECOND=4,MILLISECOND=538,ZONE_OFFSET=28800000,DST_OFFSET=0]
//获取时间日期
//get 获取下标位置的值
//Calendar.YEAR 静态常量 获取年位置的的下标
int i = gre.get(Calendar.YEAR);
System.out.println(i);//2021
int i2 = gre.get(Calendar.MONTH);
System.out.println(i2);//6
int i1 = gre.get(Calendar.DAY_OF_MONTH);
System.out.println(i1);//23
//日期
String time = i + "年" + (i2+1)+ "月" + i1 +"日 ";
System.out.println(time);//2021年7月23日
//时间:
int i3 = gre.get(Calendar.HOUR_OF_DAY);//24小时制
int i4 = gre.get(Calendar.MINUTE);//分
int i5 = gre.get(Calendar.SECOND);//秒
String time_1 = i3+"时"+i4+"分"+i5+"秒 ";
System.out.println(time_1);//9时48分50秒
int i6 = gre.get(Calendar.AM_PM);//上午下午 0/1
//星期
int i7 = gre.get((Calendar.DAY_OF_WEEK));
System.out.println(i7);//
String[] aps = {"上午: ","下午: "};
String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
//日期
String date_1 = time+aps[i6]+time_1+weeks[i7];
System.out.println(date_1);//2021年7月23日 上午: 9时55分46秒 星期六
//设置时间日期
//set 更改年份为2031
gre.set(Calendar.YEAR,2031);
System.out.println(gre.get(Calendar.YEAR));//2031
//add 在基础之上加多少
gre.add(Calendar.YEAR,10);
System.out.println(gre.get(Calendar.YEAR));//2041
Calendar instance = Calendar.getInstance();
System.out.println(instance);//和这个结果一样 GregorianCalendar gre = new GregorianCalendar();/
//isLeapYear() 确定给定的年份是否为闰年。
boolean leapYear = gre.isLeapYear(2021);
System.out.println(leapYear);//false
//Date<-->Calendar 相互转换
GregorianCalendar gre_1 = new GregorianCalendar();
Date time1 = gre_1.getTime();//获取Date对象
gre_1.setTime(time1);//将Date转Calender
System.out.println(time1);
System.out.println(gre_1);
Date d = new Date();
System.out.println("asdad"+d);
gre_1.setTime(d);
System.out.println(gre_1);
// 1 Calendar转化为Date
Calendar cal =Calendar.getInstance();
Date date =cal.getTime();
//2 Date转化为Calendar
Date date_2=new Date();
Calendar cal_1 =Calendar.getInstance();
cal_1.setTime(date_2);
}
}
获取日期:
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Ceshi {
public static void main(String[] args) {
GregorianCalendar gre = new GregorianCalendar();
//日期
int i = gre.get(Calendar.YEAR);//年
int i2 = gre.get(Calendar.MONTH);//月
int i1 = gre.get(Calendar.DAY_OF_MONTH);//日
//时间:
int i3 = gre.get(Calendar.HOUR_OF_DAY);//24小时制
int i4 = gre.get(Calendar.MINUTE);//分
int i5 = gre.get(Calendar.SECOND);//秒
int i6 = gre.get(Calendar.AM_PM);//上午下午
//星期
int i7 = gre.get((Calendar.DAY_OF_WEEK));//星期
String[] aps = {"上午: ","下午: "};
String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
//日期
String time = i + "年" + (i2+1)+ "月" + i1 +"日 ";//日期
String time_1 = i3+"时"+i4+"分"+i5+"秒 ";//时间
String date_1 = time+aps[i6]+time_1+weeks[i7];
System.out.println(date_1);
}
}
三、java.text包(SimpleDateFormat/NumberFormat)
提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口
java.text包常用类或者接口
- DateFormat以及子类SimpleDateFormat
- NumberFormat以及子类DecimalFormat
DateFormat
DateFormat是一个抽象的时间格式化类
- DateFormat 是日期/时间格式化的抽象类,它以与语言无关的方式格式化并解析日期或时间。
- DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
- 在格式化和解析日期时间过程中,其子类SimpleDateFormat更为常用
SimpleDateFormat类
SimpleDateFormat类
- 是一个以与语言环境有关的方式来格式化和解析日期的具体类
- 它提供了格式化日期时间(日期时间字符串)和解析日期时间(字符串日期时间)的方法
SimpleDateFormat构造方法
- SimpleDateFormat()
- SimpleDateFormat(String pattern) 按照指定的模式创建
- SimpleDateFormat对象
日期时间模式
常用方法
- String format(Date date);将一个java.util.Date对象按照指定的模式格式化为日期
- Date parse(String date);将一个日期字符串按照指定模式解析为java.util.Date类型的对象
public class Main {
public static void main(String[] args) {
Date date = new Date();
//时间的格式化: Date --> String
//时间转字符串 format()
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.format(date);
System.out.println(date);//Mon Jul 26 09:24:15 CST 2021
String format = sdf.format(date);
System.out.println(format);//21-7-26 上午9:25
//在构造方法种设置输出的格式
SimpleDateFormat sdf_1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss E a");
String format1 = sdf_1.format(date);
System.out.println(format1);//2021.07.26 09:32:14 星期一 上午
//String-->Date parse()
String t = "2020-07-26 09:32:14";
SimpleDateFormat sdf_2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = sdf_2.parse(t);
System.out.println(parse);//Sun Jul 26 09:32:14 CST 2020
}
}
时间格式化,写成功能模块
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Dateutil {
//Date -- > String
public static String d_S(Date date, String oattern){
SimpleDateFormat sdf = new SimpleDateFormat(oattern);
String format = sdf.format(date);
return format;
}
//String -- > Date
public static Date s_D(String time,String oattern){
SimpleDateFormat sdf = new SimpleDateFormat(oattern);
Date parse = null;
try {
parse = sdf.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return parse;
}
}
String s = Dateutil.d_S(new Date(), "MM-dd");
System.out.println(s);//07-26
Date date1 = Dateutil.s_D("2000-10-10", "yyyy-MM-dd");
System.out.println(date1);//Tue Oct 10 00:00:00 CST 2000
NumberFormat
NumberFormat是一个数字格式化抽象类
该类提供了格式化和解析数值的方法
常用方法:
- String format(double d)将数字格式化为字符串
- Number parse(String s)将字符串解析为数字
- void setMaximumFractionDigits(int newValue)设置最大小数位
- void setMinimumFractionDigits(int newValue) 设置最小小数位
- 通常情况下会使用其子类DecimalFormat格式化或者解析数字
DecimalFormat类
- DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。
构造方法:
- DecimalFormat()
- DecimalFormat(String pattern)按照指定模式构建对象
数字模式字符
常用方法
- String format(double d);格式化数字为字符串
- Number parse(String str);解析字符串数字为Number对象
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
public class NUmber_format_1 {
public static void main(String[] args) throws ParseException {
//数字格式化
double n = 123456789.213;
DecimalFormat df = new DecimalFormat();
//number-->String
String format = df.format(n);
System.out.println(format);//123,456,789.213
//"0,0000.00" 表示保留两位小数,整数部分每隔四位逗号隔开。
DecimalFormat df_1 = new DecimalFormat("0,0000.00");
String format1 = df_1.format(n);
System.out.println(format1);//1,2345,6789.21
//0的话 不存在也会补0,#不会
double n1 = 123456789.2;
DecimalFormat df_2 = new DecimalFormat("#,##0.00");
String format2 = df_1.format(n1);
System.out.println(format2);//1,2345,6789.20
//保留小数部分2-5位 #.00###
double n2 = 123456789.2;
DecimalFormat df_3 = new DecimalFormat("#,##0.00###");
String format4 = df_1.format(n2);
System.out.println(format4);//1,2345,6789.20
df_3.setMaximumFractionDigits(5);//最大小数位
df_3.setMinimumFractionDigits(2);//最小小数位
// String-->number
String str = "1,2345,6789.20";
DecimalFormat dec_1 = new DecimalFormat();
Number parse = dec_1.parse(str);
System.out.println(parse);//1.234567892E8
int i = parse.intValue();
System.out.println(i);//123456789
//% "#,##0.##%"
System.out.println("\u2030");//‰ 千分符号
}
}
四、练习题
为了以后开发方便,提供一个日期时间工具类,该类提供如下方法
- 将Date对象转换为指定模式的字符串对象。
- 将字符串日期时间按照指定模式解析为日期时间对象。
- 将数字转换为指定模式的字符串对象
- 将字符串数字按照指定模式解析为数字
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Dateutil {
//日期
//Date -- > String
public static String d_S(Date date, String oattern){
SimpleDateFormat sdf = new SimpleDateFormat(oattern);
String format = sdf.format(date);
return format;
}
//String -- > Date
public static Date s_D(String time,String oattern){
SimpleDateFormat sdf = new SimpleDateFormat(oattern);
Date parse = null;
try {
parse = sdf.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return parse;
}
//数字
//number -- > String
public static String d_S_1(Number num){
DecimalFormat dec_1 = new DecimalFormat();
String format = dec_1.format(num);
return format;
}
//String -- > number
public static Number s_D_1(String num) {
DecimalFormat dec_2 = new DecimalFormat();
Number parse_2 = null;
try {
parse_2 = dec_2.parse(num);
} catch (ParseException e) {
e.printStackTrace();
}
return parse_2;
}
}