java程序员从笨鸟到菜鸟之(十九)常用类Calendar和Date
2017-11-04 21:08
337 查看
Calendar(日历类)
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法Calendar该类是一个抽象类:不能实例化的,所以通过以下这个方法来创建对象
public static Calendar getInstance();
public int get(int field)----返回给定日历字段的值(系统当前)
对常用字段的说明:
1---public static final int YEAR:表示日历中 的年
2---public static final int MONTH:月份(注:是0开始计算的,加1)
3---public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天
相关参考:点击打开链接----6:java命令
实例1
package org.westos.calendar; import java.util.Calendar; public class CalendarDemo { public static void main(String[] args) { /* 1: * 很重要(五颗星) * 创建日历类对象 * 创建日历类对象,需要通过getInstance()方法创建对象?(是匿名内部类吗?) * 疑问:为什么不是子类创建对象? * */ Calendar calendar = Calendar.getInstance(); /* 2: * public static final int YEAR * 功能:获取年 * */ int year = calendar.get(Calendar.YEAR); /* 3: * public static final int MONTH * 功能:年中的月份(从0开始) * */ int month = calendar.get(Calendar.MONTH); /* 4: * public static final int DATE * 功能:获取月份中的天(注意) * */ int date = calendar.get(Calendar.DATE); //输出(组合) System.out.println(year+"年"+(month+1)+"月"+date+"日"); } }
Calendar常用的成员方法:
1---public
abstract void add(int field,int amount)
功能:为给定的日历的字段添加或者减去时间偏移量
2---public final voidset(int year,int month,int date)
功能:设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
实例2
package org.westos.calendar; import java.util.Calendar; public class CalendarDemo2 { public static void main(String[] args) { /* 1 * 创建日历类对象 * 再次强调(很重要) * */ Calendar c = Calendar.getInstance() ; /* 2 * 简单练习:三年前的今天(由当前推) * 方法: * public abstract void add(int field,int amount) * */ c.add(Calendar.YEAR, -3); int year = c.get(Calendar.YEAR) ; //获取月 int month = c.get(Calendar.MONTH) ; //月汇总的天 int date = c.get(Calendar.DATE) ; System.out.println(year+"年"+(month+1)+"月"+date+"日"); /* 3 * 简单练习:5年后的十天前(由当前推) * 方法:同上 * */ c.add(Calendar.YEAR, 5) ; c.add(Calendar.DATE, -10) ; //获取年 year = c.get(Calendar.YEAR) ; //获取月 month = c.get(Calendar.MONTH) ; //月汇总的天 date = c.get(Calendar.DATE) ; System.out.println(year+"年"+(month+1)+"月"+date+"日"); /* 4 * public final void set(int year, int month, int date) * 方法说明:设置--年、月、日 * */ c.set(2018,5,20) ; //获取年 year = c.get(Calendar.YEAR) ; //获取月 month = c.get(Calendar.MONTH) ; //月汇总的天 date = c.get(Calendar.DATE) ; System.out.println(year+"年"+(month+1)+"月"+date+"日"); } }
练习3
package org.westos.calendar; import java.util.Calendar; import java.util.Scanner; /** * 键盘录入一个年份,获取任意一年的二月有多少天 * 分析: * 1)创建键盘录入对象,录入某一个年份 * 2)获取日历类对象---getInstance() * 3)设置一个日历字段:年、月、日 * 语法:日历类对象.set(year,2,1):这里其实表示3月1 * 4)将时间往前推一天 * 语法:日历类对象.add(Calendar.DATE,-1) ; * 5)获取DATE月份中的天,输出即可 * * */ public class CalendarTest { public static void main(String[] args) { //1--创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //2--录入并接收数据 System.out.println("请您输入一个年份:"); int year = sc.nextInt() ; //3--创建日历类对象 Calendar c = Calendar.getInstance() ; //4--设置日历的字段:年、月、日 c.set(year, 2, 1) ;//其实月份:(month+1):3月1 //4--将时间往前推算一天 c.add(Calendar.DATE, -1) ; System.out.println("任意一年的二月有:"+c.get(Calendar.DATE)); } }
相关链接:点击打开链接,点击打开链接,点击打开链接
Date
Date类(日期类):表示特定的瞬间,精确到毫秒
常用构造方法:
public Date():表示分配的一个Date对象;
通过此无参构造获取当前系统的具体的时间
public Date(long date):指定一个时间毫秒值(不常用) ,它和1970-1-1 00:00:00有时间差
常见成员方法:
1---public long getTime():获取当前时间毫秒值
说明:如果知道Date对象,可以通过getTime()获取时间毫秒值
2---public void setTime(long time)-----不常用
实例1
package org.westos.date; import java.util.Date; public class DateDemo2 { public static void main(String[] args) { //创建一个日期对象 Date d = new Date() ; System.out.println(d); /* 1 * public long getTime() * 功能:获取当前时间毫秒值 * */ long time = d.getTime() ; System.out.println(time); /* 2 * 通过System类currentTimeMillis() * 功能:可以获取当前时间的毫秒数(系统) * 与Date的getTime()类似 * */ System.out.println(System.currentTimeMillis()); /* 3 * public void setTime(long time) * 功能:设置当前时间的毫秒数 * 疑惑:用在哪呢? * 后续会补充 * */ d.setTime(1000) ; System.out.println(d); } }
重要的成员方法(五颗星)
将Date对象--->String类型的日期的"文本格式"-----格式化
3---public final String
format(Date date)
String类型日期的"文本格式"---->Date日期对象----解析
4---public Date parse(String source)
说明:该方法本身会抛出一个异常-----ParseException(解析异常---编译时期异常)
要进行转换:必须使用中间桥梁---DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date
-> 文本String)、解析(文本String-> 日期Date)和标准化,但是DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类(SimpleDateFormat )进行实例化:
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
SimpleDateFormat类常用的构造方法:
Date---格式化--->String文本格式
public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat对象
日期和时间模式
y 年比如:2017-------->yyyy
M 年中的月份:2 ------>MM
d 月份中的天数 :------>dd
H 小时 ------------------->HH
m 小时中的分钟数--- ->mm
s 分钟中的秒数 -------->ss
开发常用模式-------->yyyy-MM-dd HH:mm:ss
实例2
package org.westos.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateFormatDemo { public static void main(String[] args) throws ParseException { //Date日期对象--->格式化---->String:日期文本格式 // 1---创建日期对象 Date d = new Date() ; System.out.println(d); /* * 2---创建SimpleDateFormat类对象,用该对象格式化Date对象 * public SimpleDateFormat(String pattern) * 说明:pattern(匹配模式--字符串形式) * 形如:"yyyy-MM-dd HH:mm:ss" * */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ; /* * 3-----格式化 * 格式化:public final String format(Date date) * 语法:SimpleDateFormat对象.format(日期对象) * 翻译:按照此模式,对当前时间以此模式输出 * 返回值类型:String * 参数类型:Date * */ String dateStr = sdf.format(d) ; System.out.println("dateStr:"+dateStr); System.out.println("-----------------------"); /* * String日期"文本格式"----->解析----->Date对象 * 注意事项:一定要保证SimpleDateFormat中的String Pattern这个模式 * 和当前给的字符串的文本格式的模式必须一致! * 语法格式:SimpleDateFormat对象.format(String s) * Date----GMT(格林威治时间) * 举例如下: * */ String s = "2017-12-30" ; SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ; /* * java.text.ParseException: Unparseable date: "2017-12-30" * 说明: 在main方法中抛异常(解析异常)--throws ParseException * */ Date d2 = sdf2.parse(s); System.out.println("d2:"+d2); } }练习1:工具类
package org.westos.date_02; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 这是将Date和String相互转换的日期工具类 * @author Apple */ public class DateUtil { //将无参构造私有化,为了不让外界创建对象 private DateUtil(){ } /** * 该方法是将Date日期对象格式化成一个String日期"文本格式" * @param d * 需要被转换的日期对象 * @param format * 需要转换的时候提供的一种模式 * @return * 最终返回的就是日期的文本格式 */ public static String dateToString(Date d,String format){
//创建SimpleDateFormat对象/*SimpleDateFormat sdf = new
SimpleDateFormat(format) ;//格式化String str = sdf.format(d) ;return str ;*/return new SimpleDateFormat(format).format(d) ;}/** * 该方法是将String的日期"文本格式"解析成一个Date日期对象 * @param s * 表示需要被解析的日期文本格式 * @param format * 表示解析日期文本格式是需要使用的一种模式 * @return * 返回的就是日期Date对象 *
@throws ParseException * 抛出解析异常 */public static Date stringToDate(String s,String format) throws ParseException{//创建SimpleDateFormat对象/*SimpleDateFormat sdf = new SimpleDateFormat(format) ;Date date = sdf.parse(s) ;return date ;*/return new SimpleDateFormat(format).parse(s)
;}}
测试类
package org.westos.date_02; import java.text.ParseException; import java.util.Date; /** * 日期和String相互转换的一个测试类 * @author Apple */ public class DateUtilDemo { public static void main(String[] args) throws ParseException { //Date--->String // 创建一个Date对象 Date d = new Date() ; //调用功能 String str = DateUtil.dateToString(d, "yyyy-MM-dd HH:mm:ss") ; System.out.println("str:"+str); String str2 = DateUtil.dateToString(d, "yyyy-MM-dd") ; System.out.println("str2:"+str2); String str3 = DateUtil.dateToString(d, "HH:mm:ss") ; System.out.println("str3:"+str3); //String---->Date //模式要和字符串文本格式一致 String s = "2018-6-25 16:26:21" ; //调用功能 Date date = DateUtil.stringToDate(s, "yyyy-MM-dd HH:mm:ss"); System.out.println("date"+date); } }练习2
package org.westos.date_02; import java.text.ParseException; import java.util.Date; import java.util.Scanner; /** * 键盘录入你的出生年月日,计算你来到这个世界有多少天了? * * 分析: * 1)键盘键盘录入出生年月日,录入这一个String类型的数据 * 2)创建SimpleDateFormat对象指定一种模式 * 3)将当前String日期文本格式转换成date对象 * 4)通过Date对象获取getTime():获取时间毫秒值 * 5)得到当前系统时间的毫秒值(System.currentTimeMillis) * 6)---(5)-(4)=long 类型的时间 * 7)换算成多少天 * 8)输出 * @author Apple */ public class MyYearOldTest { public static void main(String[] args) throws ParseException { //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //录入并接收数据 System.out.println("请输入你的出生年月日: "); String line = sc.nextLine() ; //使用刚才DateUtil工具类 Date d = DateUtil.stringToDate(line, "yyyy-MM-dd") ; //获取当前出生年日所在的时间毫秒值 long oldTime = d.getTime() ; //获取当前系统时间的毫秒值 long nowTime = System.currentTimeMillis() ; long time = nowTime - oldTime ; //换算 long day = time/1000/60/60/24 ; //输出 System.out.println("你来到这个世界有"+day+"天了"); } }
相关书籍参考:《Calender的使用详解》
相关博客链接:1---点击打开链接-----系统时间与本地时间
2---点击打开链接-----文字部分(开发常用)
3---点击打开链接-----例子
4---点击打开链接-----例子
5---点击打开链接-----例子
6---点击打开链接-----例子
相关文章推荐
- Java程序员从笨鸟到菜鸟之(十九)EL表达式和JSTL
- Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)
- Java程序员从笨鸟到菜鸟之(四)java开发常用类(包装,数字处理集合等)(上)
- Java程序员从笨鸟到菜鸟之(四)java开发常用类(包装,数字处理集合等)(上)
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析
- Java程序员从笨鸟到菜鸟之(四)java开发常用类(包装,数字处理集合等)(上)
- Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析
- Java程序员从笨鸟到菜鸟之(七十七)细谈Hibernate(十九)Hibernate二级缓存详解
- Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)
- Java程序员从笨鸟到菜鸟之(五十三)细谈Hibernate(四)Hibernate常用配置文件详解
- Java程序员从笨鸟到菜鸟之(十九)EL表达式和JSTL
- Java程序员从笨鸟到菜鸟之(十九)EL表达式和JSTL
- Java程序员从笨鸟到菜鸟之(七十七)细谈Hibernate(十九)Hibernate二级缓存详解
- Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)
- Java程序员从笨鸟到菜鸟之(四)java开发常用类(包装,数字处理集合等)(上)
- Java程序员从笨鸟到菜鸟之(十九)EL表达式和JSTL
- Java程序员从笨鸟到菜鸟之(十九)EL表达式和JSTL
- Java程序员从笨鸟到菜鸟之(五十三)细谈Hibernate(四)Hibernate常用配置文件详解
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢