操作日期时间:Date类(util)、DateFormat类、Calender类

Date类

概述:

  1. 时间日期类。
  2. 用来获得时间和日期信息。

构造方法:

Date()

  • 获得当前系统时间日期对象。
  • 若要输出,可以直接sout(对象名)

Date(long date)

  • 根据指定的毫秒值创建日期对象。

成员方法:

long getTime()

  • 获得当前时间的毫秒值。

毫秒值概述:

1秒 == 1000毫秒

时间零点:

1970.1.1 00:00:00

示例代码:

public class DateDemo01 {
    public static void main(String[] args){
        // 创建日期对象
        Date d = new Date();
        // Sun Jul 29 09:58:10 CST 2018 ==> China Standard Time
        // 2018‐07‐29 09:58:10
        // 2018/07/29 09:58:10
        System.out.println(d);
        // 获得当前时间的毫秒值:1532829685562
        System.out.println(d.getTime());
        // 根据毫秒值创建日期对象
        Date d2 = new Date(1000L);
        // Thu Jan 01 08:00:01 CST 1970
        System.out.println(d2);
    }
}

DateFormat类

DateFormat类概述:

是一个日期格式化类,抽象类,不能直接创建该类的对象,只能创建子类对象。

DateFormat类常用子类:

SimpleDateFormat

DateFormat类常见操作:

  • 将日期对象转换为字符串:Date ==> String
  • 将日期字符串转换为日期对象: String ==> Date

SimpleDateFormat类的构造方法:

SimpleDateFormat()

  • 创建日期格式化对象,使用默认的日期模式。

​​​​​​​SimpleDateFormat(String pattern)

  • 指定日期模式创建日期格式化对象。

SimpleDateFormat类的常用方法:

String format(Date date)

  • 将日期对象格式化为字符串: Date ==> String

​​​​​​​void applyPattern(String pattern)

  • 修改日期模式

​​​​​​​Date parse(String str)

  • 将字符串转换为日期对象: String ==> Date

日期模式:

yyyy

 
MM 
dd 
HHHH:24小时制   hh:12小时制
mm 
ss 

注意事项与总结:

  • 年:yyyy,可以为3位,若3位自动补成4位。可以为一位与二位,若为一位,则自动补成二位。
  • 只有MM和HH是大写的,其他都是小写。

日期转换字符串的步骤:

  1. ​​​​​​​创建日期对象。
  2. 创建日期格式化对象并指定日期模式。
  3. 调用日期格式化对象的format方法将日期转换为字符串。

示例代码:

public class DateFormatDemo01 {
    public static void main(String[] args){
        // 创建日期对象
        Date d = new Date();
        // 创建日期格式化对象:使用默认的日期模式
        // 2018‐07‐29 09:58:10
        SimpleDateFormat sdf = new SimpleDateFormat();
        // 修改日期模式
        sdf.applyPattern("yyyy/MM/dd HH:mm:ss");
        // 创建日期格式化对象:指定日期模式
        // SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        // 将日期对象格式化为字符串
        String dStr = sdf.format(d);
        // 2018/7/29 上午10:16
        // 2018‐07‐29 09:58:10
        // 2018/07/29 09:58:10
        System.out.println(dStr);
    }
}

字符串转换日期对象的步骤:

  1. 创建日期格式化对象并指定日期模式。
  2. 调用日期格式化对象的parse方法将字符串转换为日期对象。

示例代码:

public class DateFormatDemo02 {
    public static void main(String[] args) throws ParseException {
        // 日期字符串
        String str = "2018‐07‐29 10:26:23";
        // 创建日期格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy‐MM‐dd HH:mm:ss");
        // 将字符串转换为日期对象
        Date d = sdf.parse(str);
        System.out.println(d);
    }
}

Calendar类

Calendar类概述:

  1. 是一个日历类,通过日历类可以获得日期和时间信息。
  2. 是一个抽象类,不能直接创建该类的对象,只能使用子类。(猜想是单例模式的类)

如何获得日历类对象:

通过调用Calendar类的静态方法获得日历对象,该方法声明如下:

  • static Calendar getInstance() 

Calendar类常用方法:

int get(int field)

  • 根据日历字段获得对应的值。 常见的日历字段:年月日时分秒。
  • 也可以用给的常量值,参数写 Calendar.XXX
  • 取出的月份的数字,需要加上1.,才是实际的月份。

​​​​​​​void set(int field,int value)

  • 修改指定日历字段的值为value。(当成翻日历)
  • 也可以用给的常量值,参数写 Calendar.XXX
  • 如果超出范围,会自动进位。
  • 存的月份比实际的月份少一,例如:若想把系统调成7月份,则value值为6。

​​​​​​​void add(int field,int value)

  • 将指定日历字段的值在当前基础上偏移一个值value。
  • value:正数,向后偏移。
  • value:负数,向前偏移。

​​​​​​​long getTimeInMillis()

  • 获得当前时间的毫秒值

​​​​​​​Date getTime()

  • 获得日期对象

​​​​​​​void set(int year,int month,int date)

  • 修改年月日

对月份的小结:

  • 计算机取值 0-----11,对应着实际赋值的1-------12。
  • 如输入0月份,电脑get出来的月份数字也是0,但是电脑实际上是1月份。
  • 如输入12月份,则进一年,电脑get出来的月份数字也是0,但是电脑实际上是1月份。

Date和Calendar如何选择:

  1. Date 是不支持国际化的。
  2. Calendar 是支持国际化的。
  3. 如果项目需要支持国际化,则选择Calendar,否则随便选择。

综合应用Date类和Calender类:

需求:计算出一个人已经出生了多少天。

/**
    计算出生到现在活了多少天:使用Date和SimpleDateFormat实现
 */
public class CalendarDemo01 {
 public static void main(String[] args) throws ParseException {
        // 出生日期
        String brithDayStr = "2018‐07‐28";
        // 创建日期格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy‐MM‐dd");
        // 将字符串转换日期对象
        Date birthDayDate = sdf.parse(brithDayStr);
        // 获得出生时间的毫秒值
        long birthDayTime = birthDayDate.getTime();
        // 获得当前时间日期对象
        Date todayDate = new Date();
        // 获得当前时间的毫秒值
        long todayTime = todayDate.getTime();
        // 两个毫秒值相减
        long distance = todayTime ‐ birthDayTime;
        System.out.println(distance/1000/3600/24);
    }
}
/**
    计算出生到现在活了多少天:使用Calenar类实现
 */
public class CalendarDemo02 {
    public static void main(String[] args) throws ParseException {
        // 获得日历对象
        Calendar c = Calendar.getInstance();
        // 获得当前时间的毫秒值
        long todayTime = c.getTimeInMillis();
        // 修饰年月日为出生日期
        c.set(2018, 6, 28);
        // 获得出生时的毫秒值
        long birthDayTime = c.getTimeInMillis();
        // 两个毫秒值相减
        long distance = todayTime ‐ birthDayTime;
        System.out.println(distance/1000/3600/24);
    }
}

​​​​

package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值