常用JavaAPI详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38265137/article/details/80317134

Java日期与时间的处理

Date类:

在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1
开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。

在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:

  • 年份 y 由整数 y - 1900 表示。
  • 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
  • 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
  • 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
  • 分钟按通常方式由 0 至 59 的整数表示。
  • 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。

在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。

Calendar类:

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。CalendargetInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

Calendar rightNow = Calendar.getInstance();

程序示例:

package 常用JavaAPI;

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

public class TimeDame {

    public static void main(String[] args) {
        long now = System.currentTimeMillis();
        System.out.println("now = " + now);

        Date d1 = new Date(now);
        System.out.println("d1 = " + d1);

        Calendar c1 = Calendar.getInstance();
        System.out.println("c1 = " + c1.getTime().toString());
    }

}

时间和日期的基本操作:

package 常用JavaAPI;

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

public class DateDame {
    public static void main(String[] args) throws ParseException {
        Date d1 = new Date(System.currentTimeMillis());

        Calendar c1 = Calendar.getInstance();

        //格式化
        SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println("格式化前的d1 = " + d1.toString());
        System.out.println("格式化后的d1 = " + sdf.format(d1));

        //String和Date的转换
        String date = "2018-04-30";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");

        java.util.Date d2 = sdf1.parse(date);
        System.out.println("Sting转化为Date, d2 = " + d2.toString());


        //由Date类型转换为String类型
        String s1 = sdf1.format(d2);
        System.out.println("Date转换为String,s1 = " + s1);

        //Date和Calendar转换
        c1.setTime(d2);//Date转换到Calendar类
        c1.getTime();//Calendar转换到Date类
    }

}

//程序执行结果:
格式化前的d1 = 2018-04-30
格式化后的d1 = 2018-04-30 05:39:00
Sting转化为Date, d2 = Mon Apr 30 00:00:00 CST 2018
Date转换为String,s1 = 2018-04-30

日期应用小示例:

package 常用JavaAPI;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Date {

    public static void main(String[] args) throws ParseException {
        //程序示例:
        //设定女朋友的生日,并在提前两个星期的星期六提醒

        //1.设定生日,String
        String birthday = "2018-4-30";

        //2.将String类型转换为日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date date = sdf.parse(birthday);

        //3.对日期进行计算
        java.util.Date spec = preapareBirthdayDay(date);

        //4.将计算后的结果,转换为String类型输出
        String s2 = sdf.format(spec);
        System.out.println(birthday + "提前两周的周六为 : " + s2);
    }

    /*
     * 传入1个日期,计算出该日期的2个星期前的 周六的日期
     * @param birthdayDate 传入的日期
     * @return 2周前的周六的日期
     */
    public static java.util.Date  preapareBirthdayDay(java.util.Date birthdayDate) {
        //GregorianCalendar是 Calendar 的一个具体子类,
        //提供了世界上大多数国家/地区使用的标准日历系统。
        //父类声明,创建子类对象
        Calendar calendar = new GregorianCalendar();
        //接收传入的date日期,转换为Calendar类
        calendar.setTime(birthdayDate);
        calendar.add(Calendar.WEEK_OF_MONTH, -2);//提前两周
        //调整为当前日期的周六
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);//调整为当前日期的周六
        return calendar.getTime();

    }
}

//程序运行结果:
2018-4-30提前两周的周六为 : 2018-04-21

日期计算示例:

package 常用JavaAPI;

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

public class Time {

    public static void main(String[] args) throws ParseException {
        String s1 = "2018-5-1 ";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c1 = Calendar.getInstance();

        //计算一个日期加指定天数
        c1.set(2018, 5, 1);
        c1.add(Calendar.DAY_OF_WEEK, 20);
        System.out.println(c1.getTime());

        //计算两日期之差
        String  s2 = "2018-5-5";
        java.util.Date d1 = sdf.parse(s1);
        java.util.Date d2 = sdf.parse(s2);
        long diff = d1.getTime() - d2.getTime();
        long days = diff / (1000 * 60 * 60 * 24);
        System.out.println(days);
    }
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页