zoukankan      html  css  js  c++  java
  • 时间日期相关:Date类、DateFormat类、Calendar类

    1 Date类

    Date 表示特定的瞬间,精确到毫秒。

    1秒=1000毫秒

    毫秒的0点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0

    时间和日期的计算,必须依赖毫秒值。

     

    System.currentTimeMillis()   返回以毫秒为单位的当前时间。返回值是long类型。

    例:

    public class Test {
    	public static void main(String[] args) {
    		long times=System.currentTimeMillis();
    		System.out.println(times);
    	}
    }
    

    1.1 Date构造方法

    1.1.1 Date()

    注意导util下的Date

     

    例:

    import java.util.Date;
    public class Test {
    	public static void main(String[] args) {
    		//创建当前日期对象
    		Date date1=new Date();
    		System.out.println(date1);
    		
    		//创建指定毫秒值的日期对象
    		Date longdate=new Date(20000000000000L);
    		System.out.println(longdate);
    	}
    }
    

    1.2常用方法

    getTime(),把日期对象转换成对应的时间毫秒值

    例:

    import java.util.Date;
    public class Test {
    	public static void main(String[] args) {		
    		Date date1=new Date();		
    		System.out.println(date1.getTime());	
    		
    		Date longdate=new Date(20000000000000L);
    		System.out.println(longdate.getTime());
    	}
    }
    

    1.3 DategetYeargetMouth等方法,但是已经过时,会有其他类的方法取代。

    1.4 toString方法

    上面打印date对象就是默认调用了toString方法


    2 DateFormat类

    DateFormat 是日期/时间格式化子类的抽象类,

    通过这个类可以完成日期和文本之间的转换。

    也就是日期对象(new date())和字符串的互相转换。

    2.1创建对象

    DateFormat是抽象类,需要使用其子类SimpleDateFormat来创建对象。

    参数是传一个指定格式,

    指定格式的具体规则:

    在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样输出:

     

    年月日时分秒:

    yyyy-MM-dd HH:mm:ss  注意要写yyyy(四个y),写成yy就是两位数的年份。

    2.2常用方法

    format方法,将Date对象转换成String

    parse方法,将String转换成Date(转换时,该String要符合指定格式,否则不能转换) 

    例:

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Time02 {
    	public static void main(String[] args) throws ParseException {
    		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		
    		//日期对象转成字符串
    		Date date=new Date();
    		String datestr=sdf.format(date);
    		System.out.println(datestr);
    		
    		//字符串转成日期对象
    		String str="1999-05-05 12:05:06";
    		Date d=sdf.parse(str);
    		System.out.println(d);		
    	}
    }
    

    这里注意要抛异常,因为有可能传一个错误的格式,

    3 Calendar类(不常用)

    Calendar是日历类,替换掉了许多Date的方法。

    该类将所有可能用到的时间信息封装为静态成员变量,方便获取。

    Calendar为抽象类,不能直接创建对象,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象。

    3.1 Calendar类静态方法

    3.2常用方法

    例:

    import java.util.Calendar;
    import java.util.Date;
    
    public class Demo1 {
    	public static void main(String[] args) {
    		//创建Calendar对象
    		Calendar c=Calendar.getInstance(); //当前日期
    		//System.out.println(c);
    		
    		//时间偏移
    		System.out.println(c.get(Calendar.YEAR));			
    		c.add(Calendar.YEAR, 1);
    		System.out.println(c.get(Calendar.YEAR));
    		c.add(Calendar.YEAR, -2);
    		System.out.println(c.get(Calendar.YEAR));		
    		c.add(Calendar.DATE, 2);
    		System.out.println(c.get(Calendar.DATE));
    		
    		//日历类转为日期类
    		Date d=c.getTime();
    		System.out.println(d);
    		
    		//将日历类设置成指定的时间
    		Calendar c2=Calendar.getInstance();
    		c2.set(Calendar.YEAR, 2008);
    		c2.set(Calendar.MONTH,7); //这是8月
    		c2.set(Calendar.DATE,8);
    		c2.set(2055, 7, 8, 8, 8, 8);
    		System.out.println(c2.getTime());
    	}
    }
    

    注意:

    1)用fammat转换,必须先转成日期类

    2)西方星期的开始为周日,中国为周一。

    3)在Calendar类中,月份的表示是以0-11代表1-12月。

    所以月要加1,星期要减1

    4)日期是有大小关系的,时间靠后,时间越大。

    练习

    1)求出自己已经出生多少天

    import java.util.Calendar;
    public class Days {
    	public static void main(String[] args) {
    		//当前系统时间毫秒
    		long currenttime = System.currentTimeMillis();
    
    		//设置出生日期
    		Calendar c = Calendar.getInstance();
    		c.set(1987, 1, 5);
    		long birth = c.getTime().getTime();  //先转成日期类,再转成毫秒
    
    		//计算时间差
    		int day = (int) ((currenttime - birth) / 1000 / 60 / 60 / 24);
    		System.out.println("已出生" + day + "天");
    	}
    }
    

    2)求出今天距离204611日还有多少天

    import java.util.Calendar;
    public class Days2 {
    	public static void main(String[] args) {
    		// 当前系统时间毫秒
    		long currenttime = System.currentTimeMillis();
    
    		// 设置日期
    		Calendar c = Calendar.getInstance();
    		c.set(2046, 1, 1);
    		long future = c.getTime().getTime(); // 先转成日期类,再转成毫秒
    
    		// 计算时间差
    		int day = (int) ((future-currenttime) / 1000 / 60 / 60 / 24);
    		System.out.println("还有" + day + "天到2046年");
    	}
    }
    

  • 相关阅读:
    Package manager has died异常PackageInfo 引发 Crash
    Android Bitmap变迁与原理解析(4.x-8.x)
    Rxjava2不能再发射Null了
    [转]C语言的int最值问题,以及原码反码及补码
    自定义gradle插件
    ReentrantLock(重入锁)的使用
    HashSet、TreeSet和LinkedHashSet分别基于HashMap、TreeMap和LinkedHashMap
    Java类加载双亲委托模式优点
    为什么HTTPS比HTTP安全,以及两者的优缺点
    android4.4之后的HttpUrlConnection的实现是基于okhttp
  • 原文地址:https://www.cnblogs.com/hzhjxx/p/10094004.html
Copyright © 2011-2022 走看看