Java中简单日期类和日历类的小结

日期类是用来描述日期的,在java中日期都是用long来保存的(精确到毫秒)

任何日期类都可以用long来相互转换

java中有4种日期类

java.util.Date :常用的类,功能少,能表示时间和日期

java.sql.Date:它是java.util.Date的子类,表示日期

java,sql.Time:它是java.util.Date的子类,表示时间

java.sql.Time:它是java.util.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 的整数表示(有闰秒,但极少发生)

构造方法:

Date date=new Date();

可以获得当前的系统日期

另一种方法:long System.currentTimeMillis()
也是获得系统时间,但得到的时间是long类型,单位是毫秒

Date(long date)

将一个long类型转化为Date类型

比较时间前后关系
 boolean after(Date date)  :是否date之后
 boolean before(Date date)  :是否在date之前

将Date转换成字符串
String toLocaleString()  :以过时,基本不用

long getTime()  
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数

/**
 * 1请输入当前的系统时间 2 请将1418370681966转换成日期输出
 * 
 * @author Al菜菜
 *
 */
public class DateDemo01 {

	public static void main(String[] args) {
		{
			java.util.Date date = new java.util.Date();
			System.out.println(date.toLocaleString());
		}
		{
			java.util.Date date=new java.util.Date(1418370681966L);
			System.out.println(date.toLocaleString());
		}
	}

}
sql包中定义了与数据库有关的类
方便JDBC对日期进行识别
我们可以利用sql包中的日期类来实现字符串与日期类之间的转换
其他时候用得不多

ava.sql.Date
表示日期
java.sql.Time
表示时间
java.sql.Timestamp
表示日期 + 时间

将字符串转换成日期
都是java.util.Date的子类,所以该类中的方法也都被继承下来了
static Date valueOf(String s)  
静态方法,直接通过类名调用
三个类都有这个方法,但对字符串格式有不同的要求
Date d = Date.valueOf("2014-12-2");
Time t = Time.valueOf("13:2:2");
Timestamp tt = Timestamp.valueOf("2014-12-12 16:00:36");


转换原则
任何日期类型都可以和long类型相互转换
日期 -> long long = d.getTime()
long -> 日期 new Date(long)
String可以转换成sql包下的任何日期类型
sql包和util包的日期转换需要用long作为中间类型

日期的转换方法

日期构造方法
getTime()
获得日期的long表示
valueOf()
sql包日期类的方法,将String转换成日期


/**
 * 请将“2014-12-12”转换成java.util.Date类型
 * 请将"2014-12-12 16:09:22"转换成java.sql.Timestamp类型
 * 请将java.util.Date转换成java.sql.Date类型和java.sql.Time类型
 * 请将java.sql.Date转换成java.sql.Timestamp
 * 
 * @author Al菜菜
 *
 */
public class DateDemo02 {
	public static void main(String[] args) {
		{
			java.sql.Date date=java.sql.Date.valueOf("2014-12-12");
			java.util.Date date1=new java.util.Date(date.getTime());
		}
		{
			java.sql.Timestamp ts=java.sql.Timestamp.valueOf("2014-12-12 16:09:22");
		}
		{
			java.util.Date date=new java.util.Date();
			java.sql.Date date1=new java.sql.Date(date.getTime());
			java.sql.Time t=new java.sql.Time(date.getTime());
		}
		{
			java.sql.Date date=java.sql.Date.valueOf("2015-1-6");
			java.sql.Timestamp ts=new java.sql.Timestamp(date.getTime());
		}
	}
}

日历类:

java.util.Calendar是一个抽象类,不能实例化对象
获得java.util.Calendar类的对象
static Calendar getInstance() 
java.util.Calendar中定义的域
DATE MONTH YEAR 
HOUR MINUTE SECOND 
DAY_OF_WEEK 一个星期中的某天
SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY

MONTH
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER

java.util.Calendar 常用方法

void add(int field, int amount) 
在某个域个加一个数,负数向前,正数向后
boolean after(Object when)  
boolean before(Object when)  
int get(int field)  
获得某一个域的值
Date getTime()  
获得java.util.Date日期类型,与之相反的是setTime(Date date)  
void set(int field, int value)  
在特定的域上赋值

格式化日期:

所谓格式化日期就是将日期对象以特定字符串输出
java.text.DateFormat是负责格式化日期的类
抽象类
基本用法
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String s = df.format(new java.util.Date());

模式字符是代表特定含义的通用字符
yyyy 年份
yy 两位的年份
MM 月份
dd
HH 小时(24小时制)
hh 小时(12小时制)
mm
ss
E 星期


根据下面的动画所示编写代码,功能是当用户输入年份和月份时,打印出该月的日历。

<pre name="code" class="java">import java.util.Calendar; 
import java.util.Scanner; 

public class Test02 { 
    /** 
     * 静态方法 
     * @param year 
     * @param month 
     */ 
    public static void printMonth(int year,int month){ 
        Calendar c = Calendar.getInstance(); 
        c.set(Calendar.YEAR, year); 
        c.set(Calendar.MONTH, month - 1); 
        c.set(Calendar.DATE, 1); 
        int dayOfMonth = c.getActualMaximum(Calendar.DATE); 
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1; 
        int n = dayOfMonth + dayOfWeek; 
        int count = 0; 
        System.out.println("\n"+year+"年"+month+"月\n"+"日\t一\t二\t三\t四\t五\t六"); 
        for (int i = 0; i < n; i++) { 
            count++; 
            if (i < dayOfWeek) 
                System.out.print(" " + "\t"); 
            else 
                System.out.print((i - dayOfWeek + 1) + "\t"); 
            if (count == 7) { 
                count = 0; 
                System.out.println(); 
            } 
        } 
    } 

    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in); 
        System.out.println(请输入年 月); 
        int year=sc.nextInt(); 
        int month=sc.nextInt(); 
        printMonth(year,month); 
    } 

}


 
请打印出某一年的日历,按下面的要求完成试题:  

1)定义一个方法,用于输出某一个月的日历 
2)定义一个方法,用于输出某一年中所有月份的日历 

import java.util.Calendar; 
import java.util.Scanner; 

public class Test02 { 
    /** 
     * 静态方法 
     * @param year 
     * @param month 
     */ 
    public static void printMonth(int year,int month){ 
        Calendar c = Calendar.getInstance(); 
        c.set(Calendar.YEAR, year); 
        c.set(Calendar.MONTH, month - 1); 
        c.set(Calendar.DATE, 1); 
        int dayOfMonth = c.getActualMaximum(Calendar.DATE); 
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1; 
        int n = dayOfMonth + dayOfWeek; 
        int count = 0; 
        System.out.println("\n"+year+"年"+month+"月\n"+"日\t一\t二\t三\t四\t五\t六"); 
        for (int i = 0; i < n; i++) { 
            count++; 
            if (i < dayOfWeek) 
                System.out.print(" " + "\t"); 
            else 
                System.out.print((i - dayOfWeek + 1) + "\t"); 
            if (count == 7) { 
                count = 0; 
                System.out.println(); 
            } 
        } 
    } 
    /** 
     * 静态方法 
     * @param year 
     */ 
    public static void printYear(int year){ 
        for(int i=1;i<13;i++){ 
            printMonth(year, i); 
        } 
    } 
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in); 
        int year=sc.nextInt(); 
        int month=sc.nextInt(); 
        printYear(year); 
        printMonth(year,month); 
         
    } 

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值