Date类
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
Date(long millisec)
使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行
例子:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
以上实例编译运行结果如下:
Current Date: Wed 2016.11.09 at 08:23:19 AM UTC
日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 | 描述 | 示例 |
---|---|---|
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 |
“ | 单引号 | ` |
综合实例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date = new Date();
// 日期-->字符串(方法一)
SimpleDateFormat sdf = new SimpleDateFormat();
String str = sdf.format(date);
System.out.println(str); //18-9-3 上午11:26
// 日期-->字符串(方法二)
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sdf1.format(date);
System.out.println(str1); //2018-09-03 11:26:42
// 字符串-->日期
String str2 = "2018-09-02 21:00:29";
//捕获异常(str2的格式要满足sdf1的格式)
try {
Date date2 = sdf1.parse(str2);
System.out.println(date2); //Sun Sep 02 21:00:29 CST 2018
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 输入毫秒数转化为日期
date.setTime(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
// 或者直接
// Date date = new Date(System.currentTimeMillis() + 24*60*60*1000);
System.out.println(date); //Tue Sep 04 11:26:42 CST 2018
}
}
Calendar类
我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
Calendar类对象字段类型
Calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
综合实例:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CalendarTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar ca = Calendar.getInstance();
System.out.println(ca);
/**
* 结果为: java.util.GregorianCalendar[ time=1535891259673,
* 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=2018,
* MONTH=8, WEEK_OF_YEAR=36, WEEK_OF_MONTH=2, DAY_OF_MONTH=2,
* DAY_OF_YEAR=245, DAY_OF_WEEK=1, DAY_OF_WEEK_IN_MONTH=1, AM_PM=1,
* HOUR=8, HOUR_OF_DAY=20, MINUTE=27, SECOND=39, MILLISECOND=673,
* ZONE_OFFSET=28800000, DST_OFFSET=0]
*/
// 获得年
int year = ca.get(Calendar.YEAR);
// 获得月
int month = ca.get(Calendar.MONTH) + 1;
// 获得日
int date = ca.get(Calendar.DAY_OF_MONTH);
// 获得小时
int hour = ca.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = ca.get(Calendar.MINUTE);
// 获得秒
int second = ca.get(Calendar.SECOND);
// 获得毫秒
int seconds = ca.get(Calendar.MILLISECOND);
System.out.println(year + "-" + month + "-" + date + " " + hour + ":"
+ minute + ":" + second + ":" + seconds); //2018-9-3 11:32:15:84
// 设置日历
ca.set(Calendar.YEAR, 1985);
ca.set(Calendar.MONTH, 04);
ca.set(Calendar.DAY_OF_MONTH, 22);
ca.set(Calendar.HOUR_OF_DAY, 6);
ca.set(Calendar.MINUTE, 23);
ca.set(Calendar.SECOND, 34);
ca.set(Calendar.MILLISECOND, 344);
System.out.println(ca); //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=1985,MONTH=4,WEEK_OF_YEAR=36,WEEK_OF_MONTH=2,DAY_OF_MONTH=22,DAY_OF_YEAR=246,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=6,MINUTE=23,SECOND=34,MILLISECOND=344,ZONE_OFFSET=28800000,DST_OFFSET=0]
// 获得日历相关的毫秒数,Calendar->Date
long tm = ca.getTimeInMillis();
Date date2 = new Date(tm);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date2);
System.out.println(str); //1985-05-22 06:23:34
System.out.println(date2); //Wed May 22 06:23:34 CST 1985
}
}
关于 Calender 类的完整列表,你可以参考标准的 Java文档。