乐趣区

关于java:Java-日期相关操作

1、Date 类:java.util.Date

Date 的每一个实例用于示意一个工夫点,外部保护一个 long 值,该值记录的是自 1970 年 1 月 1 日 00:00:00 到以后 Date 示意的工夫之间所通过的毫秒。

留神:如果计算 1970 年 1 月 1 日 00:00:00 之前的工夫戳,那么该值为负值,可通过负值失常计算即可。

因为 Date 存在时区以及千年虫问题,所以大部分操作工夫的办法都被申明为过期的不再倡议应用了。

package date;

import java.util.Date;

public class DateDemo {public static void main(String[] args) {
        // 默认创立示意以后零碎工夫
        Date date = new Date();
        System.out.println(date);    //Thu Aug 20 10:27:16 CST 2020
        // 获取 Date 外部保护的 long 值
        long time = date.getTime();
        System.out.println(time);     //1597890475765
        
        time = time+1000*60*60*24;    // 加一天
        date.setTime(time);
        System.out.println(date);     //Fri Aug 21 10:29:20 CST 2020
        
        date.setTime(0);
        // 默认是 1970 年 1 月 1 日 00:00:00, 因为东八区的起因所以减少 8 小时 )
        System.out.println(date);     //Thu Jan 01 08:00:00 CST 1970
        
    }
}

2、SimpleDateFormat:java.text.SimpleDateFormat

该类能够将 Date 与 String 之间互转。依附的是一个日期格局字符串。

package date;

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

public class DateDemo2 {public static void main(String[] args) throws ParseException {Date now = new Date();
        System.out.println(now);    //Thu Aug 20 13:39:44 CST 2020
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        /*
         * String format(Date date)
         * 将给定的 Date 依照 SDF 指定的日期格局转换为一个字符串
         */
        String line = sdf.format(now);
        System.out.println(line);    //2020-08-20 13:39:44
        
        /*
         * 将一个字符创解析为一个 Date
         */
        String str = "2008-08-08 08:08:08";
        Date date = sdf.parse(str);
        System.out.println(date);
    }
}

3、Calendar 日历类:java.util.Calendar

Calendar 是用来操作工夫的 API,应用十分的不便。但自身是一个抽象类,提供一个用于获取实现类的静态方法:getInstance(),该办法能够依据以后零碎所在地区获取一个实用的实现类大部分地区获取回来的都是:GregorianCalendar(阳历)

package date;

import java.util.Calendar;
import java.util.Date;

public class CalendarDemo {public static void main(String[] args) {
        //Calendar 默认也示意以后零碎工夫
        Calendar calendar = Calendar.getInstance();
        /*
         * Calendar 的 toString 输入的信息很多
         * 然而不能直观的看出具体日期
         */
        System.out.println(calendar);
        /*
         * Date getTime()
         * Calendar 提供的 getTime 办法能够获取一个 Date,* 该实例示意的就是以后 Calendar 过示意的日期
         */
        Date date = calendar.getTime();
        System.out.println(date);
        /*
         * Calendar 另一个办法:* void setTime(Date date)
         * 该办法能够让以后 Calendar 示意给定的 Date
         * 所示意的日期
         */
        calendar.setTime(date);
        System.out.println(calendar);
    }
}

外汇经纪商比照 https://www.fx61.com/brokerlist

Calendar 提供了获取各工夫重量信息的办法:int get(int field)

参数为一个 int 值,不同的值示意不同的工夫重量,而咱们无需记忆这些数字,Calendar 把这些数定义为了常量。

package date;

import java.util.Calendar;

public class CalendarDemo2 {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();
        // 获取年
        int year = calendar.get(Calendar.YEAR);
        // 获取月 (月从 0 开始)
        int month = calendar.get(Calendar.MONTH)+1;
        /*
         * 获取日
         * DAY_OF_MONTH 月中的天
         * DATE         月中的天
         * DAY_OF_WEEK  周中的天 
         * DAY_OF_YEAR  年中的天
         */
        int date = calendar.get(Calendar.DATE);
        
        System.out.println(year+"-"+month+"-"+date);
        
        int h = calendar.get(Calendar.HOUR_OF_DAY);
        int m = calendar.get(Calendar.MINUTE);
        int s = calendar.get(Calendar.SECOND);
        System.out.println(h+":"+m+":"+s);
        
        // 查看明天是往年的第几天?
        int days = calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println(days);
        
        // 明天是周几?
        int dow = calendar.get(Calendar.DAY_OF_WEEK);
        String[] data = {"日","一","二","三","四","五","六"};
        System.out.println("周"+data[dow-1]);
        
        /*
         * 获取指定的工夫重量所容许的最大值
         */
        days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
        System.out.println(days);    
    }
}

void set(int field,int value)

对指定的工夫重量设置指定的值。

package date;

import java.util.Calendar;

/**
 * void set(int field,int value)
 * 对指定的工夫重量设置指定的值
 * @author ta
 *
 */
public class CalendarDemo3 {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();
        /*
         * 示意 2008-08-08 20:08:08
         */
        calendar.set(Calendar.YEAR, 2008);
        calendar.set(Calendar.MONTH, Calendar.AUGUST);
        calendar.set(Calendar.DATE,3);
        calendar.set(Calendar.HOUR_OF_DAY, 20);
        calendar.set(Calendar.MINUTE, 8);
        calendar.set(Calendar.SECOND, 8);
        // 上面的 getTime 输入如果正文掉,前面的输入后果不同
        System.out.println(calendar.getTime());
        /*
         * 下面设置日期为 8 号,然而 set 办法并非在每次
         * 设置后就真的将工夫重量该对对应值,而是在
         * getTime 时进行理论计算,然而上面的代码在
         * 设置星期几时会影响月中的天,这会导致方才
         * 设置的 8 号被笼罩等于没做。* 对此的解决办法是,当设置呈现相互影响时,* 能够在之前设置过后被动调用一次 getTime 办法
         * 让 Calendar 进行一次调整运算后再设置就没有
         * 问题了
         */
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println(calendar.getTime());
    }
}

void add(int field,int amount)

对指定的工夫重量累加给定值。若给定值为复数则是减去。

该操作与 set 不同,调用一次后就会实在进行一次计算操作。

package date;

import java.util.Calendar;

/**
 * void add(int field,int amount)
 * 对指定的工夫重量累加给定值。若给定的值为
 * 正数则是减去。* 该操作与 set 不同,调用一次后就会实在进行一次
 * 计算操作。* @author ta
 *
 */
public class CalendarDemo4 {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();
        /*
         * 3 年 5 个月零 25 天当前是哪天?
         */
        // 加 3 年
        calendar.add(Calendar.YEAR, 3);
        // 加 5 个月
        calendar.add(Calendar.MONTH, 5);
        // 加 25 天
        calendar.add(Calendar.DAY_OF_YEAR, 25);
        System.out.println(calendar.getTime());
        /*
         * 查看当周的周六是哪天?*/
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println(calendar.getTime());
    }
}
退出移动版