淘先锋技术网

首页 1 2 3 4 5 6 7

Java日期类

  • Java.util.Date

    • 日期格式:年–月--日 时:分:秒
  • java.text.SimpleDateFormat

  • java.util.Calender

  • java.sql.Date/java.sql.Time/java.sql.Timestamp(是util.Date的子类)

    • Date:年–月--日
    • Time:时:分:秒
    • Timestamp:年月日时分秒纳秒

java.util.Date(日期类)

注意Date类是一个最原始的类,java不推荐使用它。因为大多数方法已经过时了。

Date类的方法

  • Date():生成一个当前日期的Date对象,底层调用System.currentTimeMills()获得long日期。
  • Date(long date):根据指定的long生成一个Date对象。
  • boolean after(Date when):判断对象时间是否when日期之后。
  • boolean before(Date when):判断对象时间是否在when日期之前。
  • long getTime():返回该对象的时间。
  • void setTime(long time):设置该对象的时间。

java.text.Calendar(日历类)

Calendar与Date类没有任何继承关系,它是一个新的类。

Calendar是一个抽象类。它是所有日历类的模板,并提供日历类的通用方法。

Calender的方法

静态方法

  • Calendar.getInstance(TimeZone,Locale):
    • 获取Calendar类的实例。虽然也可以通过实例化该类的子类获取实例。
    • 该方法需要指定TimeZone、Locale来得到实例,不指定使用默认的参数。
    • 实例创建后,会修改其中的Year等静态属性(修改为当前时间,之前为1)。

非静态方法

  • getTime():获取对象的时间。

    // 时间格式为:
    Sat Dec 05 11:34:20 CST 2020
    
  • get(field):获取对象的字段(例如Year、Month等)。field为静态属性

    calendar.get(Calender.YEAR);// 年
    calendar.get(Calendar.MONTH);// 月 月份的起始值不是1,而是0,所以要设置8月时,用7而不是8。
    calendar.get(Calendar.DATE);// 日
    calendar.get(Calendar.HOUR);// 时
    calendar.get(Calendar.MINUTE);// 分
    calendar.get(Calendar.SECOND);// 秒
    
  • set(field,value):设置字段,年月日时分秒,值。

    • set方法有连续延迟的特性,也就是连续使用set并不会立马进行前几个的设置,而是会等到连续set完之后才进行总体的set。
  • add(field,amount):改变字段,使字段增加amount值(并且会遵守时间进制,进行进位)

    calendar.add(Calendar.YEAR, -1);// 向前一年
    calendar.add(Calendar.MONTH, 8);// 向后八个月
    
  • roll(field,amount):改变字段,使字段增加amount值(与add不同。遵守进制,但不进行进位)

Date与Calendar的转换:

  • Date date = calendar.getTime()

  • calendar.setTime(Date date)

java.util.DateFormate(时间格式化类)

DateFormate也是一个抽象类。时间格式化类也就是确定时间的格式

  • DateFormate.SHORT
  • DateFormate.MEDIUM
  • DateFormate.LONG
  • DateFormate.FULL

DateFormate的方法

静态方法

  • DateFormate.getDateInstance(DateFotmate.formate, Locale):返回一个日期格式器(实例),它格式化的字符串只有日期没有时间。
  • DateFormate.getTimeInstance(DateFotmate.formate, Locale):返回一个时间格式器(实例),它格式化的字符串只有时间没有日期。
  • DateFormate.getDateFormate(DateFotmate.formate, Locale):返回一个时间格式器(实例),它格式化的字符为日期时间。
public class DateFormatTest {
    public static void main(String[] args) {
        //需要被格式化的时间
        Date dt = new Date();
        //创建两个Locale,分别代表中国、美国
        Locale[] locales = {Locale.CHINA,Locale.US};
        DateFormat[] df = new DateFormat[16];
        //为上面两个Locale对象创建16个DateFormat对象
        for(int i = 0;i < locales.length;i++)
        {
            df[i * 8] = DateFormat.getDateInstance(DateFormat.SHORT,locales[i]);
            df[i * 8 + 1] = DateFormat.getDateInstance(DateFormat.MEDIUM,locales[i]);
            df[i * 8 + 2] = DateFormat.getDateInstance(DateFormat.LONG,locales[i]);
            df[i * 8 + 3] = DateFormat.getDateInstance(DateFormat.FULL,locales[i]);
            df[i * 8 + 4] = DateFormat.getTimeInstance(DateFormat.SHORT,locales[i]);
            df[i * 8 + 5] = DateFormat.getTimeInstance(DateFormat.MEDIUM,locales[i]);
            df[i * 8 + 6] = DateFormat.getTimeInstance(DateFormat.LONG,locales[i]);
            df[i * 8 + 7] = DateFormat.getTimeInstance(DateFormat.FULL,locales[i]);
        }

        for(int i = 0;i < locales.length;i++)
        {
            String tip  = i == 0 ? "------中国日期格式-------" : "------美国日期格式-------";
            System.out.println(tip);
            System.out.println("SHORT格式的日期格式:"+ df[i * 8].format(dt));
            System.out.println("MEDIUM格式的日期格式:"+ df[i * 8 + 1].format(dt));
            System.out.println("LONG格式的日期格式:"+  df[i * 8 + 2].format(dt));
            System.out.println("FULL格式的日期格式:"+  df[i * 8 + 3].format(dt));
            System.out.println("SHORT格式的时间格式:"+ df[i * 8 + 4].format(dt));
            System.out.println("MEDIUM格式的时间格式:"+ df[i * 8 + 5].format(dt));
            System.out.println("LONG格式的时间格式:"+  df[i * 8 + 6].format(dt));
            System.out.println("FULL格式的时间格式:"+  df[i * 8 + 7].format(dt));
        }
    }
}

非静态方法

  • parse(String datetime):将datetime字符串解析成Date类型的对象。

    可以为yyyy-mm-dd hh:mm:ss,也可以为xxxx年xx月xx日。

String str1 = "2014-12-12";
String str2 = "2014年12月10日";
//下面输出Fri Dec 12 00:00:00 CST 2014
System.out.println(DateFormat.getDateInstance().
    parse(str1));
//下面输出Wed Dec 10 00:00:00 CST 2014
System.out.println(DateFormat.getDateInstance(LONG).
    parse(str2));
//下面抛出ParseException异常
System.out.println(DateFormat.getDateInstance().
    parse(str2));

java.util.SimpleDateFormat(时间格式化类)

SimpleDateFormate是DateFormate的子类。DateFormate需要在得到实例化时传入一个格式,这个格式是内置的。

G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now=new Date();
System.out.println(myFmt2.format(now));

格式化字符串与Date类型的相互转换

public static void main(String[] args) throws ParseException {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();
    // 将date转成格式化后的字符串
    System.out.println(format.format(date));
    
    // 将格式化字符串转换成date
    date = formate.parse("2000-11-11 11:11:11");
}