一.Date类
Date表示特定的瞬间,精确到毫秒。
Date date=new Date();
System.out.println(date);
Date类中的许多方法都已经过时了,被Calendar类替代。这个类我们会在之后讲到。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。
二.DateFormat类
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。
获取日期格式器
DateFormat dateDef = DateFormat.getDateInstance();//日期格式
DateFormat dateTimeDef = DateFormat.getDateTimeInstance();//日期和时间
DateFormat timeDef = DateFormat.getTimeInstance();//时间
package trying.dateTest;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.junit.Test;
/**
* @ClassName: TestDateFormat
* @Description: TODO(这里用一句话描述这个类的作用)
* @author wangcc
* @date 2016年11月26日 上午12:12:23
*
* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
*/
public class TestDateFormat {
public static void main(String[] args) {
// TODO Auto-generated method stub
getDateStyle();
getDate();
}
@Test
public void getDateAll() {
Date date = new Date();
DateFormat dateDef = DateFormat.getDateInstance();
// 为SHORT MEDIUM时,Locale没起作用,依旧是英文格式
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
DateFormat dateLocaleFormat = DateFormat.getDateInstance(
DateFormat.LONG, Locale.CHINA);
DateFormat dateLocaleFormat2 = DateFormat.getDateInstance(
DateFormat.LONG, Locale.CHINESE);
DateFormat dateTimeDef = DateFormat.getDateTimeInstance();
DateFormat dateTime = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG);
DateFormat dateTimeLocale = DateFormat.getDateTimeInstance(
DateFormat.FULL, DateFormat.FULL, Locale.CHINA);
DateFormat timeDef = DateFormat.getTimeInstance();
DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.LONG);
DateFormat timeLocale = DateFormat.getTimeInstance(DateFormat.SHORT,
Locale.CHINA);
System.out.println("无参数的getDateInstance:" + dateDef.format(date));
System.out
.println("指定style的getDateInstance:" + dateFormat.format(date));
System.out.println("指定style和本地语言的getDateInstance:(china)"
+ dateLocaleFormat.format(date));
System.out.println("指定style和本地语言的getDateInstance:(chinese)"
+ dateLocaleFormat2.format(date));
System.out
.println("无参的getDateTimeInstance:" + dateTimeDef.format(date));
System.out.println("指定style的getDateTimeInstance:"
+ dateTime.format(date));
System.out.println("指定style和本地语言的getDateTimeInstance:"
+ dateTimeLocale.format(date));
System.out.println("无参数的getTimeInstance:" + timeDef.format(date));
System.out
.println("指定style的getTimeInstance:" + timeFormat.format(date));
System.out.println("指定style和本地语言的getTimeInstance:"
+ timeLocale.format(date));
System.out.println(dateFormat.format(date));
Date date1 = new Date();
System.out.println(date1);
}
public static void getDate() {
Date date = new Date();
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,
Locale.CHINA);
DateFormat df1 = DateFormat.getDateInstance();
// 2016年11月29日 星期二 上午11时07分28秒 CST
DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.FULL, Locale.CHINA);
DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.FULL, Locale.CHINA);
// DateFormat df2 = DateFormat.getDateTimeInstance();
String s = df.format(date);
String s1 = df1.format(date);
String s2 = df2.format(date);
String s3 = df3.format(date);
System.out.println(s);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
public static void getDateStyle() {
DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL,
Locale.CHINA);
DateFormat df2 = DateFormat.getTimeInstance(DateFormat.FULL);
String s = df.format(new Date());
String s2 = df2.format(new Date());
System.out.println("FULL:" + s);
System.out.println("LONG:" + s2);
}
}
控制台输出为:
三.SimpleDateFormat
SimpleDateFormat类主要用于完成日期之间的转换
例如你指定一个模板:2016年-11月-26日-12时-09分-56秒
你就需要
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd-HH-mm-ss”);
这样就匹配了这个模板格式
Y yyyy 年份 M MM 月 dd 日 HH 时(24小时制) hh 时(12小时制) mm 分 ss秒 S毫秒
SimpleDateFormat 有两个常用的方法:
1.public final String format(Date date)
2.public Date parse(String source)
throws ParseException
这两个方法都来自其父类DateFormat,利用上面两个函数,我们可以完成指定格式的Date与String的转化。下面看一段代码:
package trying.dateTest;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
/**
* @ClassName: TestSimpleDateFormat
* @Description: TODO(这里用一句话描述这个类的作用)
* @author wangcc
* @date 2016年11月26日 上午12:11:07
*
* SimpleDateFormat类主要用于完成日期之间的转换 你需要指定一个模板 2016年-11月-26日-12时-09分-56秒 ==
*
* Y yyyy 年份 M MM 月 dd 日 HH 时(24小时制) hh 时(12小时制) mm 分 ss秒 S毫秒
*/
public class TestSimpleDateFormat {
public static void main(String[] args) {
StringtoDate();
}
@Test
public void retest() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-S");
String s = "2016-11-29-09-12-12-123";
DateFormat df = DateFormat.getDateInstance();
Date date = null;
try {
date = sdf.parse(s);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(date);
}
public static void StringtoDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年-MM月-dd日-hh时-mm分-ss秒");
String s = "2016年-11月-26日-12时-09分-56秒";
Date date = null;
try {
date = sdf.parse(s);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(date);
}
public static void testDate() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy年-MM月-dd日-hh时-mm分-ss秒-S毫秒");
String s = sdf.format(date);
System.out.println(s);
}
public static void test() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-S");
String s = sdf.format(System.currentTimeMillis());
System.out.println(s);
}
}
四.Calendar类
Calendar 类是一个抽象类,它为“特定瞬间”与一组诸如 “YEAR”、“MONTH”、“DAY_OF_MONTH” 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 Calendar实例化有两种方式:
1 Calendar nowTime = new GregorianCalendar();
2.Calendar calendar=Calendar.getInstance();
下面我们直接看应用:
package trying.dateTest;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.junit.Test;
/**
* @ClassName: TestCalendar
* @Description: TODO(这里用一句话描述这个类的作用)
* @author wangcc
* @date 2016年11月26日 上午12:27:04
*
* Calendar 类是一个抽象类,它为“特定瞬间”与一组诸如 “YEAR”、“MONTH”、“DAY_OF_MONTH”、
* 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 Calendar实例化有两种方式,第一种是
* Calendar nowTime = new GregorianCalendar();,第二种是Calendar
* calendar=Calendar.getInstance();
*/
public class TestCalendar {
public static void main(String[] args) {
// TODO Auto-generated method stub
// getTime();
}
@Test
public void test() {
Calendar calendar = Calendar.getInstance();
calendar.set(2016, 10, 29);
System.out.println(calendar.getTime());
}
public static void getTime() {
Calendar nowTime = new GregorianCalendar();
int year = nowTime.get(Calendar.YEAR);
int month = nowTime.get(Calendar.MONTH) + 1;
int day = nowTime.get(Calendar.DAY_OF_MONTH);
System.out.println("现在的日期是:" + year + "年" + month + "月" + day + "日");
}
}
我们对Test方法进行测试:测试结果为:Tue Nov 29 22:47:49 CST 2016
而calendar.set(2016, 10, 29); 参数month设置的是10,结果却是11月。这是为什么呢,那么这个时候我们需要查阅JDK API,API永远是最好的老师。
API中说get和set中MONTH是基于0开始的,0即表示为January一月。
所以set(10) 会得到11月,而get(MONTH)+1才能得到真正的月份。
五.创建自己的DateUtil类
在学习了上述知识后,我们可以写一个属于自己的Date工具类。