3.2封装的日期类

public class MyDate //共有类,与源文件同名
{
private int year,month,day; //私有成员变量
private static int thisYear; //私有静态成员变量
static //静态成员变量初始化
{
thisYear=2012;
}
public MyDate(int year,int month,int day) //构造函数,指定日期
{
this.set(year,month,day); //调用本类中当前的成员变量
}
public MyDate() //无参构造方法。默认指定日期
{
this(1970,1,1); //调用本类中已审名的其他构造函数
}
public MyDate(MyDate d) //重载函数
{
this.set(d);
}
public void set(int year,int month,int day) //设置日期值
{
this.year=year; //this指当前的成员变量
this.month=(month>=1&&month<=12)?month:1; //判断是否满在指定的范围内
this.day=(day>=1&&day<=31)?day:1;
}
public void set(MyDate d) //函数的重载
{
set(d.year,d.month,d.day); //调用同名成员函数,不能使用this()
}
public int getYear() //获得年份
{
return this.year;
}
public int getMonth()
{
return this.month;
}
public int getDay(){
return this.day;
}
public String toString(){ //返回中文日期字符串
return year+"年"+String.format("%02d",month)+"月"+String.format("%02d",day)+"日";
}
public static int getThisYear() //静态方法获得年份
{
return thisYear;
}
public static boolean isLeapYear(int year)
{
return year%400==0||year%100!=0&&year%4==0; //判断是否闰年
}
public boolean isLeapYear() //函数的重载,判断是否闰年
{
return isLeapYear(this.year);
}
public boolean equals(MyDate d) //比较当前日期值是否与d相等
{
return this==d||d!=null&&this.year==d.year&& this.month==d.month &&this.day==d.day;
}
public static int daysOfMonth(int year,int month)
{
switch(month) //计算每月的天数
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
case 4: case 6: case 9: case 11: return 30;
case 2: return MyDate.isLeapYear(year)?29:28;
default: return 0;
}
}
public int daysofMonth() //返回当月天数
{
return daysOfMonth(this.year,this.month);
}
public void tomorrow() //当前日期改为后一天
{
this.day++; //改变this指针引用的实例值
if(this.day>this.daysofMonth())
{
this.day=1;
this.month++;
if(this.month>12)
{
this.month=1;
this.year++;
}
}
}
public MyDate yestoday() //返回当前日期的前一天日期
{
MyDate date=new MyDate(this);
date.day--;
if(date.day==0)
{
date.month--;
if(date.month==0)
{
date.month=12;
date.year--;
}
date.day=daysOfMonth(date.year,date.month); //拷贝构造方法
}
return date;
}
}
class MyDate_ex //当前包中的其他类
{
public static void main(String args[])
{
System.out.println("今年是"+MyDate.getThisYear()+",闰年?"+MyDate.isLeapYear(MyDate.getThisYear()));
MyDate d1=new MyDate(2012,12,31);
MyDate d2=new MyDate(d1);
System.out.println("d1: "+d1+",d2: "+d2+",d1==d2? "+(d1==d2)+", d1.equals(d2)? "+d1.equals(d2));
System.out.print(d1+"的明天是 ");
d1.tomorrow();
System.out.println(d1+"\n"+d1+"的昨天是 "+(d2=d1.yestoday()));
}
}

时间: 2024-11-03 20:37:51

3.2封装的日期类的相关文章

day17 包装类、日期类

包装类 作用:1.丰富了基本数据类型只能存放值的问题,还提供了大量的方法或常量. 2.包装类充当了基本数据类型和引用数据类型转换的桥梁. 应用层面:包装类.String.基本数据类型的互相转换. 1.基本数据类型转为String: String str = Integer.toString(10): String str = 10 + "": 2.String转换为基本数据类型: int i = Integer.parseInt(str): 3.基本数据类型和包装类互转换: 语法糖--

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

Java:日历类、日期类、数学类、运行时类、随机类、系统类

一:Calendar类 java.util 抽象类Calendar   1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int field) 返回给定日历字段的值. java.lang.Object 继承者 java.util.Calendar 所有已实现的接口: Serializable, Cloneable, Comparable<Calendar> 直接已知子类: GregorianCalendar 对于日期字段:

Java核心API -- 4(日期类)

1. Date类(Java.utilDate) java.util.Date类用于封装日期及时间信息,一般仅用它显示某个日期,不对他作任何操作处理,作处理用Calendar类,计算方便. //创建一个Date实例,默认的构造方法创建的日期代表当前系统时间 Date date=new Date(); //此类重写了toString()方法,输出的是日期格式 System.out.println(date); //查看date内部的毫秒值 long time=date.getTime(); // 设

日期类Date

Java在日期类中封装了有关日期和时间的信息,用户可以通过调用相应的方法来获取系统时间或设置日期和时间.Date类中有很多方法在JDK1.0公布后已经过时了,在8.3中我们将介绍JDK1.0中新加的用于替代Date的功能的其它类. 在日期类中共定义了六种构造函数. (1)public Date() 创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间. 例 Date today=new Date()://today被设置成创建时刻相对应的日期时间. (2)public Date (long

日期类 Date

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /* 日期类 Date Calendar 日期格式化类 SimpleDateFormat */ public class Demo3 { public static void main(String[] args) throws ParseException {

DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据访问者)模式和 Active Domain Object(领域对象)模式.Data Accessor 模式实现了数据访问和业务逻辑的分离:Active Domain Object 模式实现了业务数据的对象化封装. 需要注意的是,DAO设计模式是Java EE中的设计模式,而非Ja

Problem B: 时间和日期类(III)

Problem B: 时间和日期类(III) Time Limit: 4 Sec  Memory Limit: 128 MBSubmit: 2889  Solved: 1732[Submit][Status][Web Board] Description 设计一个日期时间类,用于读取输入的数据,按格式输出日期和时间. 设计日期时间类DateTime由2个成员组成,分别是一个Date类对象和一个Time类对象: 设计DateTime类需支持以下操作: DateTime::DateTime()无参构

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea