黑马程序员-java专题系列之3-日期

------- android培训java培训、期待与您交流! ----------

java专题系列之3-日期
在我们编程中经常会使用到一些日期,时间之类的数据,为了便于我们程序员操作这些数据,sun公司同样将他封装成了一个对象这就是 Date,
Date 中封装了年,月,日,时,分,秒,星期这些数据
Date 位于java.util包中,(记住java.sql包中也有个Date,这个Date用于数据库的,是java.util包中Date的子类,千万不要弄错)
现在我们来看一下Data的API文档
在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。
不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。
Date 中的相应方法已废弃。
Date 类的使用方法

实例1

import java.util.Date;

public class TestDateDeno {

	public static void main(String[] args) {
		//拿到当前时间的毫秒值
		long time = System.currentTimeMillis();
		//封装当前时间
		Date date = new Date(time);
		System.out.println(date);
	}
}

打印的结果明显不符合中国人的阅读习惯,这时我们就应该使用另一个类:DateFormat,但是该类是一个抽象类,无法直接创建对象,这时候就应该使用他的静态方法或
者直接创建他的子类 SimpleDateFormat 的对象,接下来的实例代码将分别演示这两种方式
实例2

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateDemo2 {

	public static void main(String[] args) {
		//第一种方式通过静态方法拿到继承DateFormat类的子类的对象
		//获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。
		DateFormat df = DateFormat.getDateTimeInstance();
		System.out.println(df.format(new Date()));
		//第二种方式,创建SimpleDateFormat对象,使用自己设定的模板
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
		//用自己的模板来格式数据
		System.out.println(sd.format(new Date()));
	}
}

在创建模板对象时,我们需要传入一个String类型的参数,这个模板究竟要如何设定,请看下面一张表

字母  日期或时间元素                            表示            示例  
G      Era 标志符                               Text             AD  
y         年                                    Year         1996; 96  
M      年中的月份                               Month         July; Jul; 07  
w      年中的周数                               Number          27  
W      月份中的周数                             Number          2  
D      年中的天数                               Number          189  
d      月份中的天数                             Number          10  
F      月份中的星期                             Number           2  
E      星期中的天数                             Text         Tuesday; Tue  
a      Am/pm 标记                               Text             PM  
H      一天中的小时数(0-23)                    Number            0  
k      一天中的小时数(1-24)                    Number           24  
K      am/pm 中的小时数(0-11)                   Number            0  
h      am/pm 中的小时数(1-12)                   Number           12  
m      小时中的分钟数                           Number           30  
s      分钟中的秒数                             Number           55  
S      毫秒数                                   Number           978  
z      时区                     General time zone  Pacific Standard Time; PST; GMT-08:00  
Z      时区  RFC 822 time zone  -0800  


熟悉这张表就行了
接下来在介绍一个类,Calendar ,该类出现在jdk1.1,用于替换原来的 Date 是个抽象类,你无法使用它的构造方法,你只有去找他的子类,或者找他的静态方法,拿到他自己的对象
他有一个子类叫 GregorianCalendar 通过查找源代码我们可以知道 Calendar.getInstance(); 这句代码还是创建了一个子类对象,并让父类引用指向他,这是java多态的实现
这是 Calendar.getInstance() 的内部源码

 private static Calendar createCalendar(TimeZone zone,
					   Locale aLocale)
    {
	// If the specified locale is a Thai locale, returns a BuddhistCalendar
	// instance.
	if ("th".equals(aLocale.getLanguage())
	    && ("TH".equals(aLocale.getCountry()))) {
	    return new sun.util.BuddhistCalendar(zone, aLocale);
	} else if ("JP".equals(aLocale.getVariant())
		   && "JP".equals(aLocale.getCountry())
		   && "ja".equals(aLocale.getLanguage())) {
	    return new JapaneseImperialCalendar(zone, aLocale);
	}	    

	// else create the default calendar
        return new GregorianCalendar(zone, aLocale);	
    }

下面我们来练习一下 Calendar 的使用
实例3

import java.util.Calendar;

public class TestCalendar {

	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		//将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义
		//c.clear();
		System.out.println(c);
		System.out.println("年:" + c.get(Calendar.YEAR));
		//注意,因为是从下标0开始,所以应该加1
		System.out.println("月:" + c.get(Calendar.MONTH) + 1);
		System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
		//Calendar.HOUR这个是分上下午的
		System.out.println("时:" + c.get(Calendar.HOUR));
		//Calendar.HOUR_OF_DAY这个是24小时制的
		System.out.println("时:" + c.get(Calendar.HOUR_OF_DAY));
		System.out.println("分:" + c.get(Calendar.MINUTE));
		System.out.println("秒:" + c.get(Calendar.SECOND));
		c.set(Calendar.YEAR, 2020);
		System.out.println("年:" + c.get(Calendar.YEAR));
		//c对象中的月字段向后延迟3个月
		c.add(Calendar.MONTH, 3);
		//c对象中的日字段向前延迟5个天
		c.add(Calendar.DAY_OF_MONTH, -5);
		System.out.println("年:" + c.get(Calendar.YEAR) + " 月:" + c.get(Calendar.MONTH) + " 日:" + c.get(Calendar.DAY_OF_MONTH));
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值