我与夏风皆过客,惟愿博肖揽星河!

xzwyb

导航

日期与时间

Date

java.util.Date类表示时间,JDK1.1之后推荐使用 java.util.Calendar类;

java.util.Date类中很多构造方法和方法已经过时(Deprecated),不推荐使用,

import java.util.Date;
public class DateTest {
    public static void main(String[] args) {
        //无参,使用当前时间构建Date对象
        Date date = new Date();
        System.out.println(date);
        //有参,参数为时间戳,中国东八区,1000毫秒=1秒钟
        //使用一个long值构建Date对象,参数是距离1970.1.1.00:00:00以来的毫秒数,时间戳
        Date date1 = new Date(4000);//4秒
        System.out.println(date1);
        System.out.println(System.currentTimeMillis());/*当前日期的时间戳System.currentTimeMillis()*/
        //用当前的毫秒数构建Date
        Date date2 = new Date(System.currentTimeMillis());
        System.out.println(date2);
        System.out.println("****************************");
        System.out.println("date1的时间戳:" + date1.getTime());
        System.out.println(date.after(date1));
        System.out.println(date.before(date1));
        System.out.println(date.compareTo(date1));
        //1     1表示 date比date1日期要大 , -1表示date比date1日期要小 , 0相等
        System.out.println(date.compareTo(date2));//date2是最新时间
    }
}

Calendar

JDK1.1版本开始,增加Calendar类,建议使用Calendar类代替Date类;

Calendar是抽象类,不能直接使用new创建对象;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class CalenderTest {
    public static void main(String[] args) {
        //使用默认时区和语言环境获得日历对象
        Calendar calendar1=Calendar.getInstance();
        System.out.println(calendar1);
        //使用指定的时区及语言环境获得日历对象
        Calendar calendar2= Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);
        System.out.println(calendar2);
        System.out.println("-------------get set--------------");
        //set,为calendar1,calendar2对象的字段设定值
        calendar1.set(Calendar.YEAR,2001);
        calendar1.set(Calendar.MONTH,1);//0表示1月份……
        calendar1.set(Calendar.DATE,2);
        calendar1.set(Calendar.HOUR_OF_DAY,17);
        calendar1.set(Calendar.MINUTE,42);
        calendar1.set(Calendar.SECOND,37);
        //为calendar2对象设置年月日时分秒
        calendar2.set(1997,6,5,23,18,23);
        //get,getTime方法返回Date类型
        Date date1=calendar1.getTime();
        System.out.println(date1);
        Date date2=calendar2.getTime();
        System.out.println(date2);
        System.out.println(calendar1.get(Calendar.YEAR));
        //System.out.println(calendar2.MINUTE);//获取calendar2.set的常量值
        System.out.println(calendar2.get(1));
        //Calendar.get方法其实就是通过传入fields数组中指定位置的下标来获取想要的值,
        //如Calendar.YEAR这个常量就是1,fields[1]存的就是当前时间的年份
        System.out.println("--------------add-----------------");
        //add, 修改Calendar1的字段值,将年份加2
        calendar1.add(Calendar.YEAR,2);
        System.out.println(calendar1.getTime());
    }
}

日期与时间数据的格式化方法

1、格式化

实际编程中,往往需要对时间用不同的格式进行展示;

SimpleDateFormat中定义了对时间进行格式化的方法;该类继承了抽象父类DateFormat,某些方法在父类中定义,查阅API文档时注意;

可以自定义一个模式字符串来构建SimpleDateFormat对象

private static void dateToString() {
    Calendar calendar = Calendar.getInstance();//获取日历对象
    calendar.set(Calendar.MONTH, 11);
    Date date = calendar.getTime();//将日历对象用getTime方法转换成Date对象
    //自定义格式
    //String pattern="yyyy年MM月dd日 HH时mm分ss秒";
    String pattern = "yy-M-d H:m:s";
    //构造方法传入格式参数
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    String format = sdf.format(date);//使用format格式化
    System.out.println(format);
    //System.out.println(sdf.format(cal.getTime()));//简写
}
/*22-12-9 20:4:5*/
yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区  

2、解析时间字符串

在实际编程中,往往一些时间内容都是通过用户输入获得,得到的是字符串,需要解析成日期时间类型进行处理;

SimpleDateFormat类不仅能够格式化时间,还能解析时间字符串;

public static void stringToDate() {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
    String strDate = "2001年2月2日 12时20分30秒300毫秒";
    try {
        //parse把字符串转为日期Date类型对象,如果格式不匹配抛出转换异常
        System.out.println(sdf.parse(strDate));
        //把时间戳存储在数据库中
    } catch (ParseException e) {
        e.printStackTrace();
    }
}
/*Fri Feb 02 12:20:30 CST 2001
981087630300*/

3、LocalDate

JDK8中定义了java.time.LocalDate,用来表示日期,默认格式是yyyy-MM-dd;该类不包含时间信息;

import java.time.LocalDate;
public class LocalDateTest {
    public static void main(String[] args) {
        System.out.println("-----获取LocalDate对象-----");
        //now()  获取当前日期的LocalDate对象
        LocalDate now=LocalDate.now();
        System.out.println(now);
        //of()  使用年月日数值生成LocalDate对象
        LocalDate localDate=LocalDate.of(2001,2,2);
        System.out.println(localDate);
        System.out.println("----------get-----------");
        System.out.println(localDate.getDayOfMonth());
        System.out.println(localDate.getDayOfWeek());
        System.out.println(localDate.getDayOfYear());
        System.out.println(now.getMonthValue());
        System.out.println(now.getMonth());
        System.out.println("----------parse--------");
        //parse将字符串转换成LocalDate对象
        String strLocalDate="2001-02-02";
        LocalDate myLocalDate=LocalDate.parse(strLocalDate);
        System.out.println(myLocalDate);
    }
}

4、LocalTime

LocalDate类只表示日期,JDK8中定义了新类LocalTime用来表示时间

import java.time.LocalTime;
import java.time.temporal.ChronoField;
/**
 * ChronoField是java8提供的一个枚举类
 * 里面定义了很多表示日历的字段
 * 提供基于字段的访问来操纵日期,时间或日期时间,
 * 通过实现TemporalField来扩展标准字段集
 */
public class LocalTimeTest {
    public static void main(String[] args) {
        System.out.println("---获取LocalTime对象---");
        //now()  用当前日期生成LocalTime
        LocalTime now = LocalTime.now();
        System.out.println(now);
        //of()  使用指定数字生成LocalTime
        LocalTime of = LocalTime.of(11, 2, 35, 231);
        System.out.println(of);
        System.out.println("------返回各字段值------");
        System.out.println(now.getHour());
        System.out.println(now.getMinute());
        System.out.println(now.getSecond());
        System.out.println(now.get(ChronoField.HOUR_OF_DAY));//在标准的24小时数字时钟上观察到的小时
        System.out.println(now.get(ChronoField.MINUTE_OF_HOUR));
        System.out.println(now.get(ChronoField.SECOND_OF_MINUTE));
        System.out.println("----------parse--------");
        //parse,参数格式 HH:mm:ss  将字符串转换成LocalTime对象
        LocalTime parseLocalTime = LocalTime.parse("12:02:38");
        System.out.println(parseLocalTime);
    }
}

5、LocalDateTime

LocalDateTime类,同时包含日期与时间

import java.time.LocalDateTime;
public class LocalDateTimeTest {
    public static void main(String[] args) {
        System.out.println("---获取LocalDateTime对象---");
        //now()  当前日期
        LocalDateTime now=LocalDateTime.now();
        System.out.println(now);
        //of()  指定数字 年月日时分秒
        LocalDateTime of=LocalDateTime.of(2001,4,25,14,23,45);
        System.out.println(of);
        System.out.println(now.getDayOfMonth());
        System.out.println(now.getHour());
        //parse默认格式:yyyy-MM-ddTHH:mm:ss
        LocalDateTime parse=LocalDateTime.parse("2001-02-02T12:34:23");
        System.out.println(parse);
    }
}

6、DateTimeFormatter

对于格式化及解析

//ofPattern静态方法获取DateTimeFormatter对象
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒");
//获取localDateTime对象
LocalDateTime now=LocalDateTime.now();
//LocalDate now =LocalDate.now();//只表示日期没有时间,不匹配
//把LocalDateTime LocalDate LocalTime 按照指定格式转换成字符串
//DateTimeFormatter格式要与format参数一致
String format=dtf.format(now);
System.out.println(format);
/*2022年04月10日15时42分52秒*/

7、LocalDate、LocalTime、LocalDateTime

  • 使用DateTimeFormatter对象进行格式化
  • 使用DateTimeFormatter对象把字符串按照指定的格式转换成时间日期类型对象
  • String pattern1="yyyy/MM/dd";
    DateTimeFormatter dtf1=DateTimeFormatter.ofPattern(pattern1);
    TemporalAccessor parse = LocalDate.parse("2001/02/02",dtf1);
    System.out.println(parse);
    
    String pattern2="yyyy/MM/dd HH:mm:ss";
    DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern(pattern2);
    LocalDateTime localDateTime=LocalDateTime.parse("2002/04/02 14:23:34",dtf2);
    System.out.println(localDateTime);
    
    String pattern3="HH:mm:ss";
    DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern(pattern3);
    LocalTime localTime=LocalTime.parse("14:23:34",dtf3);
    System.out.println(localTime);

posted on 2022-04-10 15:49  B2328X  阅读(230)  评论(0编辑  收藏  举报