JavaNote 3.0日期处理(1)

本文介绍Java中处理日期时间及时区的方法,包括使用java.util.Date类进行日期操作和利用TimeZone类来处理时区问题。通过示例代码详细展示了如何比较日期、设置时区偏移以及自定义SimpleTimeZone。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、java.util.Date类

1、java.util.Date类中大部分方法都已经过时。


import java.util.Date;
public class Test29 {
    public static void main(String args[]){
 /*
 boolean after(Date when)测试此日期是否在指定日期之后
 boolean before(Date when)测试此日期是否在指定日期之前
 Object clone()返回此对象的副本
 int compareTo()比较两个日期的顺序
 boolean equals(Object obj)比较两个日期的相等性
 String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 
 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)
 */
        Date date = new Date();//得到当前系统CST时间
        System.out.println(date);
        Date date1 = new Date(1000);//从标准时间1970/1/1/08/00开始+1000毫秒
        System.out.println(date1);
        System.out.println(date.equals(date1));
    }
}

二、TimeZone类

1、TimeZone表示时区偏移量,也可以计算夏令时

import java.util.*;
public class Test2 {
    public static void main(String args[]){
        TimeZone timeZone = TimeZone.getDefault();//获取默认的时区
        System.out.println(TimeZone.LONG);//Long是TimeZone类中的常量,用来表示长名称的时区,值为1
        System.out.println(TimeZone.SHORT);//Short是TimeZone类中的常量,用来表示端名称的时区,值为0
        String str[] = TimeZone.getAvailableIDs();//getAvailableIDs()是TimeZone中的静态方法,返回所有可用的时区ID
        System.out.println(timeZone.getOffset(3600000));//从给定的日期的UTC,返回此时区的偏移量,在夏令时可修改
        /*public abstract int getOffset(int era,int year,int month,int day,int dayOfWeek,int milliseconds)
        era表示年代,BC公元前,AD公元
        month是从0开始,0则表示的一月
        public abstract int getRawOffset()返回添加到 UTC 以获取此时区中的标准时间的时间量(以毫秒为单位)。因为此值不受夏令时的影响,所以它称为原始偏移量。
       */
        Locale locale = Locale.getDefault();
        System.out.println(timeZone.getDisplayName());
        System.out.println(timeZone.getDisplayName(false,0));//style只能是0和1,对应的是TimeZone的Long和Short字段
        System.out.println(timeZone.getDisplayName(false,1,locale));
        System.out.println(timeZone.getOffset(1));
        timeZone.setRawOffset(3600000+28800000);//28800000是中国标准时间对UTC的默认偏移量
        TimeZone.setDefault(timeZone);//将修改后的时区设置成默认时区
        System.out.println(new Date());//打印出现在的时间,会发现原本偏移UTC8个小时,现在偏移了9个小时

//        public int getDSTSavings()返回添加到本地标准时间以获取本地挂钟时间的时间量。 如果调用useDaylightTime()返回true则默认实现返回3600000毫秒(即一小时)。 否则返回0(零)。

        TimeZone timeZone1 = TimeZone.getTimeZone("GMT+1");
        /*自定义时区需要进行标准化,例“GMT + 10”和“GMT + 0010”分别表示GMT前10小时10分钟。
         NormalizedCustomID:
             GMT Sign TwoDigitHours : Minutes
         Sign: one of
             + -
         TwoDigitHours:
             Digit Digit
         Minutes:
             Digit Digit
         Digit: one of
             0 1 2 3 4 5 6 7 8 9
         */
        TimeZone.setDefault(timeZone1);
        System.out.println(timeZone1.getID());
        //SimpleTimeZone是TimeZone的直接子类,下面给出自定义的SimpleTimeZone实例
        SimpleTimeZone simpleTimeZone = new SimpleTimeZone(28800000,"WXW",Calendar.MAY,
                18,-Calendar.FRIDAY,57600000,SimpleTimeZone.STANDARD_TIME,10,1,
                2,8,SimpleTimeZone.STANDARD_TIME,3600000);
        /*
        SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek,
        int startTime, int startTimeMode, int endMonth, int endDay, int endDayOfWeek, int endTime, int endTimeMode, int dstSavings)
        参数说明:
        rawOffset:偏移量
        ID:simpleTimeZone的ID
        startMonth:取Calendar的月份字段
        startDay:该月的具体日期
        startDayOfWeek:取Calendar中的星期字段,从前往后数加-,从后往前定义不加符号,实例中是指5月18号第二个星期五
        startTime:夏令时开始的时间,单位为毫秒
        startTimeMode:取SimpleTimeZone的字段
        STANDARD_TIME :作为标准时间指定的开始或结束时间模式的常数
        WALL_TIME :指定为挂钟时间的开始或结束时间模式的常数,设置当本地时间达到多少时间时开始夏令时。
        UTC_TIME :指定为UTC的开始或结束时间模式的常数。 设置UTC时间达到多少时,开始夏令时。
        dstSavings:夏令时提前的时间,单位毫秒
         */
        System.out.println(simpleTimeZone);
        TimeZone.setDefault(simpleTimeZone);
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTimeInMillis());
        Date date = new Date(calendar.getTimeInMillis()-86400000);
        System.out.println(date);//得到5月17日的日期
        System.out.println(simpleTimeZone.inDaylightTime(date));//测试5月17日是否在夏令时中
        System.out.println(simpleTimeZone.getDSTSavings());//获取夏令时提前量
        System.out.println(simpleTimeZone.getRawOffset());//获取夏令时偏移量
        System.out.println(new Date());//处于夏令时的当前时间
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值