Java 日期时间问题,Date&Calendar类等

本文目录:

当我们需要获取当前时间:

import java.util.Date;

public class Test {
   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();

       // 使用 toString() 函数显示日期时间
       System.out.println(date.toString());
   }
}

result:

Sun Jan 14 22:10:03 CST 2018

Date对象有以下方法:

方法描述
boolean after(Date date)若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
boolean before(Date date)若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
Object clone( )返回此对象的副本。
int compareTo(Date date)比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
int compareTo(Object obj)若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
boolean equals(Object date)当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
long getTime( )返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
int hashCode( )返回此对象的哈希码值。
void setTime(long time)用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
String toString( )把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

日期和时间的格式化编码

时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母描述示例
G纪元标记AD
y四位年份2001
M月份July or 07
d一个月的日期10
hA.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
KA.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
文字定界符Delimiter
单引号`

用 SimpleDateFormat 格式化日期

如:

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

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

      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
     //其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。注意大小写

      System.out.println("Current Date: " + ft.format(dNow));
   }
}   

result:

Current Date: 星期日 2018.01.14 at 10:17:42 下午 CST

使用printf格式化日期

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

转 换 符说 明示 例
c包括全部日期和时间信息星期六 十月 27 14:21:20 CST 2007
F“年-月-日”格式2007-10-27
D“月/日/年”格式10/27/07
r“HH:MM:SS PM”格式(12时制)02:25:51 下午
T“HH:MM:SS”格式(24时制)14:28:16
R“HH:MM”格式(24时制)14:28

eg:

import java.util.Date;

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

    //c的使用  
    System.out.printf("全部日期和时间信息:%tc%n",date);          
    //f的使用  
    System.out.printf("年-月-日格式:%tF%n",date);  
    //d的使用  
    System.out.printf("月/日/年格式:%tD%n",date);  
    //r的使用  
    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
    //t的使用  
    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
    //R的使用  
    System.out.printf("HH:MM格式(24时制):%tR",date);  
  }
}

result:

全部日期和时间信息:星期日 一月 14 22:23:37 CST 2018
年-月-日格式:2018-01-14
月/日/年格式:01/14/18
HH:MM:SS PM格式(12时制):10:23:37 下午
HH:MM:SS格式(24时制):22:23:37
HH:MM格式(24时制):22:23

Java 休眠(sleep)

sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
例如,下面的程序会休眠5秒:

import java.util.*;

public class test {
   public static void main(String args[]) {
      try { 
         System.out.println(new Date( )); 
         Thread.sleep(1000*5);   // 休眠5秒
         System.out.println(new Date( )); 
      } catch (Exception e) { 
          System.out.println("Got an exception!"); 
      }
   }
}

测量时间

import java.util.*;

public class test {
    public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ));
         Thread.sleep(5*60*10);//休眠一波
         System.out.println(new Date( ));
         long end = System.currentTimeMillis( );
         long diff = end - start;//毫秒为单位
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

result:

Sun Jan 14 22:55:29 CST 2018
Sun Jan 14 22:55:32 CST 2018
Difference is : 3024

Calendar类

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期

Calendar类中用以下这些常量表示不同的意义:

常量描述
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类中方法:
1. set设置

public final void set(int year,int month,int date)

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

public void set(int field,int value)

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

c1.set(Calendar.DATE,10);
  1. add设置
    比如把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算

    c1.add(Calendar.DATE, 10);
    
  2. get获取

        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);
        // 获得星期几(美式):1代表星期日、2代表星期一
        int day = c1.get(Calendar.DAY_OF_WEEK);
    

GregorianCalendar类

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

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

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

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

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

方法说明
void add(int field, int amount)根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。
protected void computeFields()转换UTC毫秒值为时间域值
protected void computeTime()覆盖Calendar ,转换时间域值为UTC毫秒值
boolean equals(Object obj)比较此 GregorianCalendar 与指定的 Object。
int get(int field)获取指定字段的时间值
int getActualMaximum(int field)返回当前日期,给定字段的最大值
int getActualMinimum(int field)返回当前日期,给定字段的最小值
int getGreatestMinimum(int field)返回此 GregorianCalendar 实例给定日历字段的最高的最小值。
Date getGregorianChange()获得格里高利历的更改日期。
int getLeastMaximum(int field)返回此 GregorianCalendar 实例给定日历字段的最低的最大值
int getMaximum(int field)返回此 GregorianCalendar 实例的给定日历字段的最大值。
Date getTime()获取日历当前时间。
long getTimeInMillis()获取用长整型表示的日历的当前时间
TimeZone getTimeZone()获取时区。
int getMinimum(int field)返回给定字段的最小值。
int hashCode()重写hashCode.
boolean isLeapYear(int year)确定给定的年份是否为闰年。
void roll(int field, boolean up)在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
void set(int field, int value)用给定的值设置时间字段。
void set(int year, int month, int date)设置年、月、日的值。
void set(int year, int month, int date, int hour, int minute)设置年、月、日、小时、分钟的值。
void set(int year, int month, int date, int hour, int minute, int second)设置年、月、日、小时、分钟、秒的值。
void setGregorianChange(Date date)设置 GregorianCalendar 的更改日期。
void setTime(Date date)用给定的日期设置Calendar的当前时间。
void setTimeInMillis(long millis)用给定的long型毫秒数设置Calendar的当前时间。
void setTimeZone(TimeZone value)用给定时区值设置当前时区。
String toString()返回代表日历的字符串。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值