【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection
【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection
1.Date及其经常使用API
1)JAVA 中的时间
Java中的时间使用标准类库的Date类表示。是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。
固定的时间点叫纪元(epoch),是UTC时间1970年 1月 1日 00:00:00。
UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time格林威治时间)一样,是一种具有实际目的的科学标准时间。
2)Date类简单介绍
java.util.Date 类封装日期及时间信息。
Date类的大多数用于进行时间分量计算的方法已经被Calendar代替。
3)setTime与getTime方法
void setTime(long time):
该方法用于为一个Date对象设置其须要表示的时间,该參数为一个long值。其含义是须要表示的这个时间点距离1970年1月1日 00:00:00之间的毫秒差。
long getTime()
该方法用于获取一个Date对象所表示的时间点。该返回值为一个long值。表示该时间点距离1970年1月1日 00:00:00之间的毫秒差。
4) Date 重写 toString方法
Date重写了toString()方法,用一个字符串来描写叙述当前Date对象所表示的时间。
格式例如以下:
Mon Feb 17 15:36:55 CST 2014
代码演示:
package day03; import java.util.Date; /**
* java.util.Date
* 其每个实例用于表示一个时间点
* 内部维护一个long值,该值是从UTC时间的1970/01/01 00:00:00
* 至当前Date表示的时间点之间的毫秒差
*
*/
public class DateDemo01 {
public static void main(String[] args) {
/*
* 默认创建出来的Date实例表示当前系统时间
*/
Date date = new Date();
/*
* Date类重写类toString,仅仅是对于非英语国家来说不是非常友好
*/
System.out.println(date); //Mon Aug 24 21:37:16 CST 2015 /*
* 获取Date内部维护的long值
*/
long longTime = date.getTime();
System.out.println(longTime); //1440423436050 //表示明天当前时间
longTime += 1000*60*60*24;
/*
* 支持传入long值的构造方法
* 创建的Date就表示该long值所表示的时间
*/
Date tomrrowDate = new Date(longTime);
System.out.println(tomrrowDate); //Tue Aug 25 21:37:16 CST 2015
/*
* 也能够在现有的Date对象上调用setTime方法
* 将long值传入,使其表示这个时间
*/
date.setTime(longTime);
System.out.println(date); //Tue Aug 25 21:37:16 CST 2015 } }
2.SimpleDateFormat
1)SimpleDateFormat简单介绍
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的详细类。它同意进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
简单的说。SimpleDateFormat就是依据一个特定的日期格式在字符串与Date之间相互转换。
2)日期模式匹配字符串
日期模式的匹配字符串例如以下表:
比如: yyyy年MM月dd日--HH:mm:ss 能够匹配 2014年01月06日--13:22:41
3)将Date格式化为String
将Date格式化为String。我们须要使用SimpleDateFormat提供的方法:
String format(Date d)
代码演示:
package day03; import java.text.SimpleDateFormat;
import java.util.Date; /**
* java.text.SimpleDateFormat
* 该类的作用是使用给定的字符串格式在Date与String之间进行转换。 * 对于该类,须要掌握:
* 1:会写日期格式字符串
* 2:记住两个转换方法(String->Date,Date->String)
*
*/
public class SimpleDateFormatDemo01 {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now);
/*
* 2015-08-24 09:50:12
* yyyy-MM-dd HH:mm:ss
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
/*
* String format(Date date)
* 依照创建SimpleDateFormat时指定的日期格式。
* 将当前给定的date对象表示的时间转换为字符串。
*/
String str = sdf.format(now);
System.out.println(str);
} }
4)将String解析为Date
将String格式化为Date,我们须要使用SimpleDateFormat提供的方法:
Date parse(String s)
代码演示:
package day03; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
将字符串依照该日期格式解析为Date
*
*/
public class SimpleDateFormatDemo02 {
public static void main(String[] args) {
String str = "2008-08-08 20:08:08";
System.out.println(str); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
/*
* Date parse(String str)
* 将给定的字符串解析为Date对象并返回。 */
Date date = sdf.parse(str);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
} }
3.Calendar类
1)Calendar 简单介绍
java.util.Calendar 类用于封装日历信息,其主要作用在于其方法能够对时间分量进行运算。
Calendar是抽象类。其详细子类针对不同国家的日历系统,当中应用最广泛的是GregorianCalendar(格里高里历。即通用的阳历),相应世界上绝大多数国家/地区使用的标准日历系统。
2)getInstance()方法
Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()。
该方法能够依据当前系统所在地区获取一个适当的Calendar的子类实现。
在实际开发中,也推荐使用该方法来实例化Calendar的对象。
3)setTime与getTime方法
Calendar的void setTime(Date date),同意我们为Calendar设置Date对象所表示的时间。
Calendar的 Date getTime(),同意我们获取一个使用Date对象描写叙述的Calendar所表示的时间。
代码演示:
package day03; import java.util.Calendar;
import java.util.Date; /**
* java.util.Calendar
* ---public abstract class Calendar
* 日历类,用作操作时间。
* 经常使用的是格里高利历法(阳历)
* 默认创建出来的Calendar实现类的实例表示当前系统时间
*
*/
public class CalendarDemo01 {
public static void main(String[] args) {
/*
* Calendar的getInstance能够依据当前系统所在地区
* 创建合适的实现类,一般是格里高利历法。
*/
Calendar calendar = Calendar.getInstance(); /*
* 不能直观看到详细表示的时间。 */
System.out.println(calendar); /*
* Calendar -> Date
*
* Date getTime()
* Calendar提供的getTime方法能够将其表示的时间以Date形式返回。
*/
Date date = calendar.getTime();
System.out.println(date); /*
* Date -> Calendar
*
* void setTime(Date date)
* Calendar提供了一个setTime()方法。能够使当前
* Calendar表示给定的date所表示的时间。
*/
Date now = new Date();
calendar.setTime(now);
System.out.println(calendar); } }
4)设置日期及时间分量
Calendar提供了一种通用的设置时间的方式:
void set(int field,int value)
该方法能够通过对不同的时间分量分别设置不同的值。Calendar对不同的时间分量提供了相应的常量。我们在使用set方法设置时,第一个參数就应当使用相应的常量作为时间分量。
代码演示:
package day03; import java.util.Calendar; /**
* Calendar提供类一个set方法。同意我们对当前Calendar
* 的各个时间分量进行单独设定。
*
*/
public class CalendarSet {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); /*
* 设置各个时间分量,
* 使其表示:2008/08/08 20:08:08
* 须要注意。设置了某个时间分量的值可能会影响其它时间分量的值。 * 比如:设置了年、月、日可能会将星期改变。
*/ //设置年份
calendar.set(Calendar.YEAR,2008); //设置月份
//月份从0開始,有常量相应。0表示1月。 。。 calendar.set(Calendar.MONTH,7); //设置日
//Calendar.DATE==Calendar.DAY_OF_MONTH
calendar.set(Calendar.DAY_OF_MONTH,8); //设置小时
//Calendar.HOUR_OF_DAY :24小时制
//Calendar.HOUR :12小时制
calendar.set(Calendar.HOUR_OF_DAY,20); //设置分钟
calendar.set(Calendar.MINUTE,8); //设置秒
calendar.set(Calendar.SECOND,8); System.out.println(calendar.getTime()); } }
5) 获取时间分量相应的值
Calendar提供了一种通用的获取时间分量的方式:
int get(int field)
该方法能够通过对不同的时间分量获取对应的值。
Calendar对不同的时间分量提供了对应的常量,我们在使用get方法获取时,參数就应当使用对应的常量作为时间分量。
6)getActualMaximum方法
int getActualMaximum(int field)方法用于获取给定时间分量所同意的最大值。
代码演示:
package day03; import java.util.Calendar; /**
* Calendar提供了一个get方法,能够获取给定的时间分量所相应的值。
*
*/
public class CalendarGet {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance(); //获取年
int year = calendar.get(Calendar.YEAR);
//获取月,从0開始
int month = calendar.get(Calendar.MONTH)+1;
//获取日
int day = calendar.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+day); //获取星期。每周第一天从星期日開始(1表示周日)
int week = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println(week==1?7:week-1); /*
* int getActualMaximum(int field)
* Calendar提供了一个方法。能够获取给定的时间分量
* 在当前Calendar表示的日期中所同意的最大值。
* 查看当月的月底--Calendar.DAY_OF_MONTH
*/
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("这个月:"+days+"天"); /*
* 今年多少天?--Calendar.DAY_OF_YEAR
*/
days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println("今年共:"+days+"天"); } }
7) add方法
Calendar还同意我们使用统一的方式来对某个时间分量的值进行计算。
我们须要用法
void add(int field,int amount)
该方法能够为某个时间分量的值加上给定的值,若想减去给定的值,那么传入的值须要是负数就可以。而且计算后会自己主动进行对应的进位,比如若当前为月底,那么加一天后。为下个月的月初。而月就会进位。
package day03; import java.util.Calendar; /**
* Calendar提供了一个add方法,用于计算时间。
* void add(int field,int value)
* 对于给定的时间分量加上给定的值,若value为负数,
* 则减去指定的值。
*
*/
public class CalendarAdd {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//calendar.add(Calendar.YEAR,1);
System.out.println(calendar.getTime()); /*
* 查看3年零2个月又25天是那天?
*/
calendar.add(Calendar.YEAR,3);
calendar.add(Calendar.MONTH,2);
calendar.add(Calendar.DAY_OF_YEAR,25); //可能会跨年,故用DAY_OF_YEAR
//calendar.add(Calendar.DATE,25);
System.out.println(calendar.getTime()); //减去4年
calendar.add(Calendar.YEAR,-4);
System.out.println(calendar.getTime()); } }
4.Collection
java提供了一种能够存数一组数据的数据结构,其提供了丰富的方法。在实际开发中往往比数组使用的广泛。这样的数据结构成为集合:Collection。
Collection是一个接口,其定义了集合的相关功能方法。
1) List和Set
Collection派生出了两个子接口,一个是List还有一个则是Set。
List:称为可反复集,顾名思义,该集合中是同意存放反复元素的,那么何为反复元素?反复元素指的并不是是同一个元素,而是指equals方法比較为true的元素。
Set:称为不可反复集,所以,该集合中是不能将同样的元素存入集合两次,同List,这里同样指的也是两个元素的equals比較结果为true。
2) add()、size()、clear()、isEmpty()方法
Collection定义了一个add方法用于向集合中加入新元素。
该方法定义为:
boolean add(E e)
该方法会将给定的元素加入进集合,若加入成功则返回true,否则返回false。
size方法用于获取当前集合中的元素总数。
该方法定义为:int size()
clear方法用于清空集合。
该方法定义为:void clear()
isEmpty方法用于推断当前集合中是否不 包括元素。该方法定义为:boolean isEmpty()
代码演示:
package day03; import java.util.ArrayList;
import java.util.Collection; /**
* java.util.Collection
* 集合,用于存放一组元素。
* 提供类若干功能,比数组使用方便。 *
*/
public class CollectionDemo01 {
public static void main(String[] args) {
Collection c = new ArrayList(); /*
* boolean add(E e)
* 将当前集合中加入给定的元素
* 若成功加入则返回true
*/
c.add("one");
c.add("two");
c.add("three");
c.add("four"); /*
* int size()
* 获取当前集合中的元素个数
*/
System.out.println("size:"+c.size()); //size:4 /*
* boolean isEmpty()
* 推断当前集合是否不包括不论什么元素
* 当集合中没有元素时返回true
*/
boolean b = c.isEmpty();
System.out.println(b); //false /*
* void clear()
* 清空集合元素
*/
c.clear();
System.out.println("size:"+c.size()); //size:0
System.out.println(c.isEmpty()); //true } }
3)contains方法
boolean contains(Object o)
该方法会用于推断给定的元素是否被包括在集合中。若包括则返回true,否则返回false。
这里须要注意的是,集合在推断元素是否被包括在集合中是使用元素的equals的比較结果。
(o==null ? e==null : o.equals(e)) 当中e是集合中的元素。
代码演示:
package day03; import java.util.ArrayList;
import java.util.Collection; /**
* 推断集合是否含有给定的元素
*
*/
public class CollectionDemo02 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Aoo("zhangsan",21));
c.add(new Aoo("lisi",22));
c.add(new Aoo("wangwu",23)); /*
* 集合的toString格式
* [元素1.toString(),元素2.toString()...]
*/
System.out.println(c); //[zhangsan,21, lisi,22, wangwu,23] Aoo a = new Aoo("zhangsan",28); /*
* boolean contains(E e)
* 推断当前集合是否包括给定元素,包括则返回true
* 推断根据是看给定的元素与集合中现有的元素是否
* 存在equals比較为true的。有则觉得包括! */
boolean contains = c.contains(a);
System.out.println("contains:"+contains); //contains:true } }
4)集合持有对象的引用
集合中存储的都是引用类型的元素,那么引用类型变量实际上存储的是对象的“地址”,所以实际上集合仅仅存储了元素对象在堆中的地址。
而并非将对象本身存入了集合中。
代码演示:
package day03; import java.util.ArrayList;
import java.util.Collection; public class CollectionDemo03 {
public static void main(String[] args) {
Collection c = new ArrayList();
Aoo o = new Aoo("zhangsan",23);
c.add(o);
System.out.println(c); //[zhangsan,23] o.setName("lisi");
System.out.println(c); //[lisi,23] } }
【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection的更多相关文章
- 【VNC】Linux环境VNC服务安装、配置与使用
[VNC]Linux环境VNC服务安装.配置与使用 2009-06-25 15:55:31 分类: Linux 前言:作为一名DBA,在创建Oracle数据库的过程中一般要使用dbca和netc ...
- 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装
[MySQL]Linux下MySQL 5.5.5.6和5.7的RPM.二进制和源码安装 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后, ...
- 【转】Python基础-封装与扩展、静态方法和类方法
[转]Python基础-封装与扩展.静态方法和类方法 一.封装与扩展 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者的代码:而外部使用者只知道一个接口(函数),只要接口(函数 ...
- 【转】shell编程下 特殊变量、test / [ ]判断、循环、脚本排错
[转]shell编程下 特殊变量.test / [ ]判断.循环.脚本排错 第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~] ...
- 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(二)
之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...
- 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(一)
网上高人多. 高手在民间,饭桶在机关. 越用树莓派,越发现这玩意儿的潜力,我想,未来我们用它,可以做很多事情. 最近在看树莓派的应用场景,看到网上有人用它做电视盒子. 参考相关文章,简单实践了一下,整 ...
- 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
[转] C#学习笔记14——Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计 .NET Framework 命名空 ...
- 【Transact-SQL】找出不包含字母、不包含汉字的数据
原文:[Transact-SQL]找出不包含字母.不包含汉字的数据 测试的同事,让我帮忙写个sql语句,找出表中xx列不包含汉字的行. 下面的代码就能实现. IF EXISTS(SELECT * FR ...
- 【JeecgBoot】关于 jeecg-boot 的项目理解、使用心得和改进建议
工欲善其事,必先利其器. 脚手架选型 一年前,我接到为团队落地一个快速开发脚手架的任务. 在月底这节骨眼上,时间紧,任务急,有想自己撸一个脚手架的人都赶紧把这想法收起来吧!这劳民又伤身的事咱肯定是不能 ...
随机推荐
- 微信小程序上传多张图片,及php后台处理
微信小程序上传多张图片,级小程序页面布局直接来代码index.wxml <view class='body' style='width:{{windowWidth}}px;height:{{wi ...
- JavaScript--编程挑战
小伙伴们,请编写"改变颜色"."改变宽高"."隐藏内容"."显示内容"."取消设置"的函数,点击相应 ...
- 318 Maximum Product of Word Lengths 最大单词长度乘积
给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且两个单词不含公共的字母.你可以认为每个单词只包含小写字母.如果不存在这样的两个单词,返 ...
- Educational Codeforces Round 42 (Rated for Div. 2)
A. Equator(模拟) 找权值的中位数,直接模拟.. 代码写的好丑qwq.. #include<cstdio> #include<cstring> #include< ...
- ionic2/3 禁止屏幕旋转,禁止横屏,竖屏
ionic2/ionic3禁止屏幕旋转,及解除禁止旋转 1.添加插件: cmd到项目目录---> cordova plugin add cordova-plugin-screen-orienta ...
- hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)
首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to- ...
- IE9的F12工具,"网络"页签,点击"开始捕获"之后,请求显示的状态是"挂起"的分析和解决
最近一个项目,客户端使用用jQuery编写ajax请求,服务端采用struts2框架.js发送请求和action处理请求过程中,遇到一个问题.刚开始觉得问题很诡异,仔细定位很久之后才发现问题,虽然问题 ...
- SQL基本操作——日期函数
SQL日期:当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配.只要数据包含的只是日期部分,运行查询就不会出问题.但是,如果涉及时间,情况就有点复杂了.在讨论日期查 ...
- dubbo之主机绑定
主机绑定 查找顺序 缺省主机 IP 查找顺序: 通过 LocalHost.getLocalHost() 获取本机地址. 如果是 127.* 等 loopback 地址,则扫描各网卡,获取网卡 IP. ...
- 字符串str
字符串: #字符串的索引从0开始的,如果倒数最后一位是-1,索引的位置是唯一的.var1 = var[0:2] #从第一个字符到第2个字符var2 = var[:] #从第一个到最后var3 = va ...