Java日期时间

java.util.Date类

java.util提供了Date类来封装日期和时间。实例化Date类的两个构造函数,

Date();--当前时间

Date(long millisec);--距离格林威治时间1970年1月1日millisec毫秒的时间

使用SimpleDateFormat格式化日期

import java.util.*;
import java.text.*;

public class DateDemo {
   public static void main(String args[]) {

      Date now = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(now));
    //Current Date: 火 2016.11.01 at 01:37:56 午後 CST
} }

简单的DateFormat格式化编码

字母描述示例
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
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
K A.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
'文字定界符Delimiter
"单引号`

使用printf格式化日期

printf方法可以很轻松地格式化时间和日期。使用两个字母格式,它以t开头并且以下面转换字符表格中的一个字母结尾。例如:

import java.util.Date;
  
public class DateDemo {

   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用toString()显示日期和时间
       System.out.printf("%1$s %2$tB %2$td, %2$tY",  "Due date:", date);
       //Due date: 11月 01, 2016       
   }
}

日期和时间转换字符

字符描述例子
c完整的日期和时间Mon May 04 09:51:52 CDT 2009
FISO 8601 格式日期2004-02-09
DU.S. 格式日期 (月/日/年)02/09/2004
T24小时时间18:05:19
r12小时时间06:05:19 pm
R24小时时间,不包含秒18:05
Y4位年份(包含前导0)2004
y年份后2位(包含前导0)04
C年份前2位(包含前导0)20
B月份全称February
b月份简称Feb
n2位月份(包含前导0)02
d2位日子(包含前导0)03
e2位日子(不包含前导0)9
A星期全称Monday
a星期简称Mon
j3位年份(包含前导0)069
H2位小时(包含前导0), 00 到 2318
k2位小时(不包含前导0),  0 到 2318
I2位小时(包含前导0), 01 到 1206
l2位小时(不包含前导0),  1 到 126
M2位分钟(包含前导0)05
S2位秒数(包含前导0)19
L3位毫秒(包含前导0)047
N9位纳秒(包含前导0)047000000
P大写上下午标志PM
p小写上下午标志pm
z从GMT的RFC 822数字偏移-0800
Z时区PST
s自 1970-01-01 00:00:00 GMT的秒数1078884319
Q自 1970-01-01 00:00:00 GMT的毫妙1078884319047

 

解析字符串为时间

SimpleDateFormat亦可将符合format的字符串装换成Date对象

package per.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDataFormat {
    public static void main(String[] args){
        Date date = new Date();

          SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");
          String str = "2016.11.01";
          Date date2=new Date();
          try {
              date2 = df.parse(str);
              System.out.println(date2);
          }catch (ParseException e){
              System.out.println("Unparseable using"+df);
          }
    }//Tue Nov 01 00:00:00 CST 2016
}

测量时间

结束时间-开始时间=用时。System.currentTimeMillis();--取得系统当前时间秒数。

import java.util.*;

public class TestDataFormat {

   public static void main(String args[]) {
       try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         Thread.sleep(6000);//让当前线程休眠(阻塞)6秒,让出CPU的使用,给别的线程利用cpu的机会
         System.out.println(new Date( ) + "\n");
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
       } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   }
}

Calendar类

创建一个Canlendar对象---

Calendar c = Calendar.getInstance();//默认是当前日期

创建一个指定日期的Canlendar对象

Calendar c1= new Calendar.getIntance();

c1.set(2016,11,01);//20161101

Calendar类对象字段类型

Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几

Calendar类对象信息的设置

Set设置

如:

Calendar c1 = Calendar.getInstance();

调用:

public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

利用字段类型设置

如果只设定某个字段,例如日期的值,则可以使用如下set方法:

public void set(int field,int value)

把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算

c1.set(Calendar.DATE,10);

把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算

c1.set(Calendar.YEAR,2008);

其他字段属性set的意义以此类推

Add设置

Calendar c1 = Calendar.getInstance();

把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算

c1.add(Calendar.DATE, 10);

把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算

<pre>c1.add(Calendar.DATE, -10);

Calendar类对象信息的获得

Calendar c1 = Calendar.getInstance(); // 获得年份 int year = c1.get(Calendar.YEAR); // 获得月份 int month = c1.get(Calendar.MONTH) + 1; // 获得日期 int date = c1.get(Calendar.DATE); // 获得小时 int hour = c1.get(Calendar.HOUR_OF_DAY); // 获得分钟 int minute = c1.get(Calendar.MINUTE); // 获得秒 int second = c1.get(Calendar.SECOND); // 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推) int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar类

Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。

Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这些代表公历定义的两个时代。

下面列出GregorianCalendar对象的几个构造方法:

序号构造函数和说明
1GregorianCalendar() 
在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
2GregorianCalendar(int year, int month, int date) 
在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar
3GregorianCalendar(int year, int month, int date, int hour, int minute) 
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
4GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 
  为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
5GregorianCalendar(Locale aLocale) 
在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。
6GregorianCalendar(TimeZone zone) 
在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。
7GregorianCalendar(TimeZone zone, Locale aLocale) 
 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

这里是GregorianCalendar 类提供的一些有用的方法列表:

 

序号方法和说明
1void add(int field, int amount) 
根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。
2protected void computeFields() 
转换UTC毫秒值为时间域值
3protected void computeTime() 
覆盖Calendar ,转换时间域值为UTC毫秒值
4boolean equals(Object obj) 
比较此 GregorianCalendar 与指定的 Object。
5int get(int field) 
获取指定字段的时间值
6int getActualMaximum(int field) 
返回当前日期,给定字段的最大值
7int getActualMinimum(int field) 
返回当前日期,给定字段的最小值
8int getGreatestMinimum(int field) 
 返回此 GregorianCalendar 实例给定日历字段的最高的最小值。
9Date getGregorianChange() 
获得格里高利历的更改日期。
10int getLeastMaximum(int field) 
返回此 GregorianCalendar 实例给定日历字段的最低的最大值
11int getMaximum(int field) 
返回此 GregorianCalendar 实例的给定日历字段的最大值。
12Date getTime()
获取日历当前时间。
13long getTimeInMillis() 
获取用长整型表示的日历的当前时间
14TimeZone getTimeZone() 
获取时区。
15int getMinimum(int field) 
返回给定字段的最小值。
16int hashCode() 
重写hashCode.
17boolean isLeapYear(int year)
确定给定的年份是否为闰年。
18void roll(int field, boolean up) 
在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
19void set(int field, int value) 
用给定的值设置时间字段。
20void set(int year, int month, int date) 
设置年、月、日的值。
21void set(int year, int month, int date, int hour, int minute) 
设置年、月、日、小时、分钟的值。
22void set(int year, int month, int date, int hour, int minute, int second) 
设置年、月、日、小时、分钟、秒的值。
23void setGregorianChange(Date date) 
设置 GregorianCalendar 的更改日期。
24void setTime(Date date) 
用给定的日期设置Calendar的当前时间。
25void setTimeInMillis(long millis) 
用给定的long型毫秒数设置Calendar的当前时间。
26void setTimeZone(TimeZone value) 
用给定时区值设置当前时区。
27String toString() 
返回代表日历的字符串。

转载于:https://www.cnblogs.com/blackheartinsunshine/p/6019408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值