Date类
理解
- java.util 包提供了Date类来封装当前的日期和时间 是父类
- java.sql 是子类,一个包装了毫秒值的渡包装器(thin wrapeer) ,它允许JDBC 将毫秒值 标识为SQL DATE 值
java.util 构造函数
- 构造函数1
- public Date(){}
- 构造函数2
- public Date(long millisec)
- 该参数从1970年1月1号起的毫米数
java.util 方法
序号 | 方法和描述 |
---|---|
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
3 | Object clone( ) 返回此对象的副本。 |
4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
8 | int hashCode( ) 返回此对象的哈希码值。 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
10 | String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
日期默认字符串格式
import java.util.Date;
public class Demo6 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
}
}
//结果
Sun Jan 15 11:31:12 CST 2023
Process finished with exit code 0
用日期字符串创建日期对象
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Demo6 {
public static void main(String[] args) throws ParseException {
String timeString = "2023-01-25 11:34:30";
String parseStringFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(parseStringFormat, Locale.getDefault());
Date parseDate = simpleDateFormat.parse(timeString);
System.out.println(parseDate);
String timeString2 = "2023年01年25 11:34:30";
String parseStringFormat2 = "yyyy年MM年dd HH:mm:ss";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(parseStringFormat2,Locale.getDefault());
Date parseDate2 = simpleDateFormat1.parse(timeString2);
System.out.println(parseDate2);
}
}
//结果
Wed Jan 25 11:34:30 CST 2023
Wed Jan 25 11:34:30 CST 2023
Process finished with exit code 0
格式化日期1-SimpleDateFormat
-
使用SimpleDateFormat,是一个以语言环境敏感的方式来格式化和分析日期的类
-
SimpleDateFormat 允许你选择用户自定义日期格式来运行
//方式一 public static void main(String[] args) { Date date = new Date(); //simple:简单的 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");//时间的格式 System.out.print("当前时间:"+sdf.format(date)); } //方法二 public class Demo3 { public static void main(String[] args) { Date date = new Date(); Locale locale = Locale.getDefault();//获取此Java 虚拟机实例的当前默认语言环境 String string = "yyyy-MM-dd hh:mm:ss"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(string,locale); String time = simpleDateFormat.format(date); System.out.println(time); } }
日期和时间的格式化编码
- 时间模式字符串用来指定时间格式。
- 时间模式字符串中,所用的ASCll字母被保留为模式字母
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
’ | 文字定界符 | Delimiter |
" | 单引号 | ` |
格式化日期2
- printf格式化日期
- 使用两个字母格式,它以%t开头并且以下面表格中的一个字母结尾
public static void main(String[] args) {
Date date = new Date();
System.out.printf("全部日期和时间信息:%tc%n",date);
System.out.printf("年-月-日:%tF%n",date);
System.out.printf("HH:MM:SS %tr%n",date);
System.out.printf("HH:MM:SS %tT%n ",date);
System.out.printf("HH:MM %tR%n",date);
}
字母格式表
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12时制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24时制) | 14:28:16 |
R | "HH:MM"格式(24时制) | 14:28 |
Locale类
util 工具包
理解
Locale对象 表示了特定的地理,政治和文化地区。
public class Demo3 {
public static void main(String[] args) {
// Date date = new Date();
// Locale locale = Locale.getDefault();
// String string = "yyyy-MM-dd hh:mm:ss";
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat(string,locale);
// String time = simpleDateFormat.format(date);
// System.out.println(time);
Locale locale = Locale.getDefault();//获取此Java 虚拟机实例的当前默认语言环境
String country = locale.getCountry();
String language = locale.getLanguage();
System.out.println(country);
System.out.println(language);
}
}
时间戳
- 当前时间毫秒值
时间戳转换成时间字符串
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Demo7 {
public static void main(String[] args) {
Date date = new Date();
long time = date.getTime();// 也可用 long l = System.currentTimeMillis();
System.out.println("当前时间戳为:"+time);
String stringFormat = "yyyy-MM-dd HH:mm:ss";//时间格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(stringFormat,Locale.getDefault());
String formatDate = simpleDateFormat.format(time);
System.out.println("时间戳转换为时间字符串为:"+formatDate);
}
}
//结果
当前时间戳为:1673754410258
时间戳转换为时间字符串为:2023-01-15 11:46:50
Process finished with exit code 0
时间字符串转换为时间戳
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Demo8 {
public static void main(String[] args) throws ParseException {
String timeString = "2023-01-25 11:34:30";
String stringFormat = "yyyy-MM-dd HH:mm:ss";//时间格式
System.out.println("时间字符串格式:"+timeString);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(stringFormat, Locale.getDefault());
Date parseDate = simpleDateFormat.parse(timeString);//时间字符串 转 日期
long time = parseDate.getTime();//日期 获得 毫秒数
System.out.println("时间字符串格式转时间戳:"+time);
}
}
//结果
时间字符串格式:2023-01-25 11:34:30
时间字符串格式转时间戳:1674617670000
Process finished with exit code 0
java .sql
-
构造函数
- Date(long data)
-
常用方法
- toString();
- Date.valueOf();
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Demo5 {
public static void main(String[] args) {
long l = System.currentTimeMillis();
Date date = new Date(l);//构造函数
System.out.println(date.toString());//toString()
Date date1 = Date.valueOf("2023-01-15");// 将这个形式日期String转换为java.sql.date
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
String format = simpleDateFormat.format(date1);
System.out.println(format);
}
}
//结果
2023-01-15
23-1-15 上午12:00
Process finished with exit code 0
Calendar类
- 日历类
- 它是一个抽象类,用于提供关于日期时间计算的方法
方法声明 | 方法作用 |
---|---|
static Calender getInstance() | 返回一个Calendar对象,获取默认时区和语言环境获得一个日历 |
int get(int field) | 返回给定日历字段的值 |
void add(int field,int amount) | 根据日历的规则,为给定的日历字段添加或减去指定的时间量 |
void set(int field,int value) | 设置“年/月/日/小时/分钟/秒/微妙”等值 |
void set(int year,int month,int date) | 设置日历字段 YEAR,MONTH 和 DAY_OF-_MONTH的值 |
public class Demo2 {
public static void main(String[] args) {
//创建日历对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);//获得系统的日历
// 使用set方法设置
calendar.set(Calendar.YEAR,2023);// 年
calendar.set(Calendar.MONTH,0);// 月,从0开始,0表示1月
calendar.set(Calendar.DAY_OF_MONTH,2);// 日
calendar.set(Calendar.HOUR_OF_DAY,15);// 24小时计时
calendar.set(Calendar.MINUTE,17);// 17分
calendar.set(Calendar.SECOND,10);// 10秒
System.out.println(calendar.get(2));
// 使用set方法设置2
calendar.set(2024,0,2,15,17,19);
System.out.println(calendar);
}
}
//结果
java.util.GregorianCalendar[time=1673767311605,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=0,WEEK_OF_YEAR=3,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=15,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=21,SECOND=51,MILLISECOND=605,ZONE_OFFSET=28800000,DST_OFFSET=0]
0
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2024,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=2,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=17,SECOND=19,MILLISECOND=605,ZONE_OFFSET=28800000,DST_OFFSET=0]
Process finished with exit code 0
Calendar 和 Date
import java.util.Calendar;
import java.util.Date;
public class Demo3 {
public static void main(String[] args) {
// 1.根据Date 对象创建 Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
// 注意:Calendar 没有构造函数接受 Date 对象,因此要先创建一个Calendar 对象,
// 然后使用 setTime() 设置 Date对象
System.out.println(calendar);
System.out.println("--------------------");
// 2.根据 Calendar 对象获取 Date 对象
Date date = calendar.getTime();
System.out.println(date);
}
}
// 结果
java.util.GregorianCalendar[time=1673767906934,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=0,WEEK_OF_YEAR=3,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=15,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=31,SECOND=46,MILLISECOND=934,ZONE_OFFSET=28800000,DST_OFFSET=0]
--------------------
Sun Jan 15 15:31:46 CST 2023
Process finished with exit code 0
常用操作Calendar
获取当前时间
import java.util.Calendar;
public class Demo4 {
public static void main(String[] args) {
// 创建 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 获取年、月、日、时、分、秒
int year = calendar.get(Calendar.YEAR);// 年 计数从1开始
int monday = calendar.get(Calendar.MONDAY)+1;// 月 计数从0开始
int day = calendar.get(Calendar.DAY_OF_MONTH);// 日 从1开始
int week = calendar.get(Calendar.DAY_OF_WEEK)-1;// 周 1-7 ,星期天返回1,星期一返回2......星期六返回7
int hour = calendar.get(Calendar.HOUR_OF_DAY);// 时 [0,24)
int minute = calendar.get(Calendar.MINUTE);// 分 [0,60)
int second = calendar.get(Calendar.SECOND);// 秒 [0,60)
System.out.println(year+","+monday+","+day+","+week+","+hour+","+minute+","+second);
}
}
// 结果
2023,1,15,0,15,48,40
Process finished with exit code 0
日期格式化
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Demo5 {
public static void main(String[] args) {
// 根据Calendar 对象 设置 Date对象
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date);
String stringFormat = "yyyy-MM-dd HH:mm:ss";//日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(stringFormat, Locale.getDefault());
String formatTime = simpleDateFormat.format(date);
System.out.println(formatTime);
}
}
// 结果
Sun Jan 15 15:55:11 CST 2023
2023-01-15 15:55:11
Process finished with exit code 0
设置时间
- 方法1
public class Demo6 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,2023);// 年
calendar.set(Calendar.MONTH,0);// 月,从0开始,0表示1月
calendar.set(Calendar.DAY_OF_MONTH,2);// 日
calendar.set(Calendar.HOUR_OF_DAY,15);// 24小时计时
calendar.set(Calendar.MINUTE,17);// 17分
calendar.set(Calendar.SECOND,10);// 10秒
// 根据 Calendar对象 获取 Date对象
Date date = calendar.getTime();
String stringFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(stringFormat, Locale.getDefault());
String time = simpleDateFormat.format(date);
System.out.println(time);
}
}
// 结果
2023-01-02 15:17:10
Process finished with exit code 0
- 方法2
public class Demo7 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2024,0,2,15,17,19);
Date date = calendar.getTime();
String stringFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(stringFormat, Locale.getDefault());
String format = simpleDateFormat.format(date);
System.out.println(format);
}
}
// 结果
2024-01-02 15:17:19
Process finished with exit code 0
增加或减少时间
public class Demo8 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
String stringFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(stringFormat, Locale.getDefault());
String time1 = simpleDateFormat.format(date);
System.out.println(time1);
System.out.println("-----------------");
calendar.add(Calendar.HOUR_OF_DAY,3);
calendar.add(Calendar.MINUTE,20);
calendar.add(Calendar.MINUTE,-30);
Date date1 = calendar.getTime();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(stringFormat,Locale.getDefault());
String time2 = simpleDateFormat1.format(date1);
System.out.println(time2);
}
}
// 结果
2023-01-15 16:18:17
-----------------
2023-01-15 19:08:17
Process finished with exit code 0
比较时间
public class Demo9 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Calendar calendarNew = Calendar.getInstance();
calendarNew.add(Calendar.HOUR_OF_DAY,-5);// 5小时以前
int result1 = calendar.compareTo(calendarNew);// 大 小
System.out.println(result1);
System.out.println("------------------------");
calendarNew.add(Calendar.HOUR_OF_DAY,7);
int result2 = calendar.compareTo(calendarNew);// 小 大
System.out.println(result2);
}
}
// 结果
1
------------------------
-1
Process finished with exit code 0
计算时间差
- 可用 Calendar.getTimeInMillis() 取得两个时间的微秒级的时间差,在再加以换算即可。
import java.util.Calendar;
public class Demo10 {
public static void main(String[] args) {
Calendar calendarStart = Calendar.getInstance();
Calendar calendarEnd = Calendar.getInstance();
calendarEnd.add(Calendar.DAY_OF_WEEK,2);
long value = calendarEnd.getTimeInMillis() - calendarStart.getTimeInMillis();
System.out.println("差值:"+value);
long day = value/(1000*60*60*24);
System.out.println("day:"+day);
}
}
// 结果
差值:172800000
day:2
Process finished with exit code 0