文章目录
Java日期类
-
Java.util.Date
- 日期格式:年–月--日 时:分:秒
-
java.text.SimpleDateFormat
-
java.util.Calender
-
java.sql.Date/java.sql.Time/java.sql.Timestamp(是util.Date的子类)
- Date:年–月--日
- Time:时:分:秒
- Timestamp:年月日时分秒纳秒
java.util.Date(日期类)
注意Date类是一个最原始的类,java不推荐使用它。因为大多数方法已经过时了。
Date类的方法
- Date():生成一个当前日期的Date对象,底层调用System.currentTimeMills()获得long日期。
- Date(long date):根据指定的long生成一个Date对象。
- boolean after(Date when):判断对象时间是否when日期之后。
- boolean before(Date when):判断对象时间是否在when日期之前。
- long getTime():返回该对象的时间。
- void setTime(long time):设置该对象的时间。
java.text.Calendar(日历类)
Calendar与Date类没有任何继承关系,它是一个新的类。
Calendar是一个抽象类。它是所有日历类的模板,并提供日历类的通用方法。
Calender的方法
静态方法
- Calendar.getInstance(TimeZone,Locale):
- 获取Calendar类的实例。虽然也可以通过实例化该类的子类获取实例。
- 该方法需要指定TimeZone、Locale来得到实例,不指定使用默认的参数。
- 实例创建后,会修改其中的Year等静态属性(修改为当前时间,之前为1)。
非静态方法
-
getTime():获取对象的时间。
// 时间格式为: Sat Dec 05 11:34:20 CST 2020
-
get(field):获取对象的字段(例如Year、Month等)。field为静态属性
calendar.get(Calender.YEAR);// 年 calendar.get(Calendar.MONTH);// 月 月份的起始值不是1,而是0,所以要设置8月时,用7而不是8。 calendar.get(Calendar.DATE);// 日 calendar.get(Calendar.HOUR);// 时 calendar.get(Calendar.MINUTE);// 分 calendar.get(Calendar.SECOND);// 秒
-
set(field,value):设置字段,年月日时分秒,值。
- set方法有连续延迟的特性,也就是连续使用set并不会立马进行前几个的设置,而是会等到连续set完之后才进行总体的set。
-
add(field,amount):改变字段,使字段增加amount值(并且会遵守时间进制,进行进位)
calendar.add(Calendar.YEAR, -1);// 向前一年 calendar.add(Calendar.MONTH, 8);// 向后八个月
-
roll(field,amount):改变字段,使字段增加amount值(与add不同。遵守进制,但不进行进位)
Date与Calendar的转换:
-
Date date = calendar.getTime()
-
calendar.setTime(Date date)
java.util.DateFormate(时间格式化类)
DateFormate也是一个抽象类。时间格式化类也就是确定时间的格式
- DateFormate.SHORT
- DateFormate.MEDIUM
- DateFormate.LONG
- DateFormate.FULL
DateFormate的方法
静态方法
- DateFormate.getDateInstance(DateFotmate.formate, Locale):返回一个日期格式器(实例),它格式化的字符串只有日期没有时间。
- DateFormate.getTimeInstance(DateFotmate.formate, Locale):返回一个时间格式器(实例),它格式化的字符串只有时间没有日期。
- DateFormate.getDateFormate(DateFotmate.formate, Locale):返回一个时间格式器(实例),它格式化的字符为日期时间。
public class DateFormatTest {
public static void main(String[] args) {
//需要被格式化的时间
Date dt = new Date();
//创建两个Locale,分别代表中国、美国
Locale[] locales = {Locale.CHINA,Locale.US};
DateFormat[] df = new DateFormat[16];
//为上面两个Locale对象创建16个DateFormat对象
for(int i = 0;i < locales.length;i++)
{
df[i * 8] = DateFormat.getDateInstance(DateFormat.SHORT,locales[i]);
df[i * 8 + 1] = DateFormat.getDateInstance(DateFormat.MEDIUM,locales[i]);
df[i * 8 + 2] = DateFormat.getDateInstance(DateFormat.LONG,locales[i]);
df[i * 8 + 3] = DateFormat.getDateInstance(DateFormat.FULL,locales[i]);
df[i * 8 + 4] = DateFormat.getTimeInstance(DateFormat.SHORT,locales[i]);
df[i * 8 + 5] = DateFormat.getTimeInstance(DateFormat.MEDIUM,locales[i]);
df[i * 8 + 6] = DateFormat.getTimeInstance(DateFormat.LONG,locales[i]);
df[i * 8 + 7] = DateFormat.getTimeInstance(DateFormat.FULL,locales[i]);
}
for(int i = 0;i < locales.length;i++)
{
String tip = i == 0 ? "------中国日期格式-------" : "------美国日期格式-------";
System.out.println(tip);
System.out.println("SHORT格式的日期格式:"+ df[i * 8].format(dt));
System.out.println("MEDIUM格式的日期格式:"+ df[i * 8 + 1].format(dt));
System.out.println("LONG格式的日期格式:"+ df[i * 8 + 2].format(dt));
System.out.println("FULL格式的日期格式:"+ df[i * 8 + 3].format(dt));
System.out.println("SHORT格式的时间格式:"+ df[i * 8 + 4].format(dt));
System.out.println("MEDIUM格式的时间格式:"+ df[i * 8 + 5].format(dt));
System.out.println("LONG格式的时间格式:"+ df[i * 8 + 6].format(dt));
System.out.println("FULL格式的时间格式:"+ df[i * 8 + 7].format(dt));
}
}
}
非静态方法
-
parse(String datetime):将datetime字符串解析成Date类型的对象。
可以为yyyy-mm-dd hh:mm:ss,也可以为xxxx年xx月xx日。
String str1 = "2014-12-12";
String str2 = "2014年12月10日";
//下面输出Fri Dec 12 00:00:00 CST 2014
System.out.println(DateFormat.getDateInstance().
parse(str1));
//下面输出Wed Dec 10 00:00:00 CST 2014
System.out.println(DateFormat.getDateInstance(LONG).
parse(str2));
//下面抛出ParseException异常
System.out.println(DateFormat.getDateInstance().
parse(str2));
java.util.SimpleDateFormat(时间格式化类)
SimpleDateFormate是DateFormate的子类。DateFormate需要在得到实例化时传入一个格式,这个格式是内置的。
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now=new Date();
System.out.println(myFmt2.format(now));
格式化字符串与Date类型的相互转换
public static void main(String[] args) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
// 将date转成格式化后的字符串
System.out.println(format.format(date));
// 将格式化字符串转换成date
date = formate.parse("2000-11-11 11:11:11");
}