关于时间的操作(Java)
2017-05-31 23:18
387 查看
对于时间操作一般使用Date(时间类)SimpelDateFormat(时间格式类)Calendar(日历接口)三者配合使用。以Date为中心,SimpleDateFormat获取字符串的日期转换为Date 类,再把Date类转换到Calendar类计算后,再转换为Date类,最终转换格式,使用SimpleDateFormat()输出
当遇到类似的开发需求
要求用户输入一个日期,然后对该日期进行一系列的预算
再计算后的日期显示给用户时
流程如下
1.获取用户输入的日期字符串
2.使用SimpleDateFormat将其转换为Date
3.创建一个Calendar,使其表示Date表示的日期
4.使用Calendar转换为一个Date
5.将Calendar转换为Date
6.使用SimpleDateFormat将Date转换为字符串后显示给用户
Date类常用方法和注意事项
1.Date date=new Date();此时date获取的是当前时间
2.long getTime();获取存储在date类中长整形的变量(表示时间)
3.void setTime();把表示时间的长整形的变量存在Date里
代码示例:
SimpleDateFormat:
1.构造函数里传入的是格式例如:“yyyy-MM-dd hh:mm:ss”
y:表示年
M:表示月
d:表示日
H:表示小时(12小时制)
h:表示小时(24小时制)
m:表示分钟
s:表示秒
2.String format(Date date)format
方法可以将给定的date对象说表示的时间按照SimpleDateFormat指定的日期格式转换为字符串
3.Date parse(String str)
将给定的字符串按照SimpleDateFormat指定的日期格式解析为一个Date对象。
4.注意!!!使用parse方法时要抛出异常
代码示例:
Calendar:
1.Calendar是一个借口,需要实现。常用的是阳历的实现(用Calendar的静态方法getInstance()方法)
Calendar c=Calendar.getInstance();
2.void set(int field,int value)
其中第一个参数为:时间分量,例如:年月,日等等
第二个参数为对应的值时间分量是一个int值,使用Calendar提供的常量
3.Calendar->Date
Date getTIme()
Calendar提供了方法gerTime,该方法 返回了一个Date对象,该对象表示的时间就是当前Calendar表示的时间
4.Date->Calendar
void setTime(Date date)
Calendar的setTime方法可以使当前Calendar表示给定的Date所表示的时间
5.int get(int field)
获取对应时间分量的值
!!!注意!!!在设置时,获取的月要加1,因为一月是0
因为美国是从星期天开始算起,所以1是星期天
6.getActualMaximum()
获取某一个时间分量所允许的最大值
7.!!!!注意!!例如:
在2017.03.29-31号
新建一个Calendar的単例
设置年:2017
设置月:2
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
得到日期为:3
例如:
在2017.03.01-28号
新建一个Calendar的単例
设置年:2017
设置月:2
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
得到日期为:28
原因:
1.Calendar类当你set的时候,并不会立即生效,set()方法是有延迟,就是当你写这么一段代码时
cal.set(Calendar.MONTH, 5); 它是没有立即生效的。
当调用get()、getTime()、getTimeInMillis()、add() 或 roll()方法时,
才会重新计算日历的时间值(以毫秒为单位)。
解决方法:
实例化Calendar之后,执行clear方法,清除Calendar中的缓存
8.Calendar中计算时间的方法
void add(int field,int value)
对指定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值
示例代码
import java.util.Calendar;
/**getActualMaximum()
* 获取某一个时间分量所允许的最大值
* @author Analyze
*
*Actual:实际的,真实的
*Maximum:最大的,极大地
*/
public class CalendarDamo4 {
}
import java.util.Calendar;
/**
* Calendar中计算时间的方法
* void add(int field,int value)
* 对指定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值
* @author Analyze
*
*/
public class CalendarDamo5 {
}
“`
当遇到类似的开发需求
要求用户输入一个日期,然后对该日期进行一系列的预算
再计算后的日期显示给用户时
流程如下
1.获取用户输入的日期字符串
2.使用SimpleDateFormat将其转换为Date
3.创建一个Calendar,使其表示Date表示的日期
4.使用Calendar转换为一个Date
5.将Calendar转换为Date
6.使用SimpleDateFormat将Date转换为字符串后显示给用户
Date类常用方法和注意事项
1.Date date=new Date();此时date获取的是当前时间
2.long getTime();获取存储在date类中长整形的变量(表示时间)
3.void setTime();把表示时间的长整形的变量存在Date里
代码示例:
import java.util.Date; /* * java.util.Date * Date的每一个实例用于表示一个确切的时间点 * 内部维护了一个long值,该值记录的是从 * 1970年1月1日00:00:00到表示的时间点之间所经历的毫秒值 * 正数是70年以后的日期,负数是70年以前的日期 * 由于date设计上存在缺陷(时区,千年虫),所以它的大部分方法被 * 设置为“过时的”,不再建议使用 */ public class DemeDemo { public static void main(String[] args) { /* * 使用默认构造方法创建的Date表示当前的系统时间 */ Date now=new Date(); /* * Date重写了toString,返回的字符串 * 显示的就是当前Date表示的时间。格式: * Mon May 29 21:23:58 CST 2017 * 对于非英语地区不够友好 */ System.out.println(now.toString()); /* * Date的大部分方法不建议使用了 */ now.getYear(); /* * 获取Date内部维护的long值 */ long time=now.getTime(); System.out.println(time); //明天这一刻的毫秒值 time+=1000*60*60*24*10000; System.out.println(new Date(time)); /* * void setTime(long) * 设置一个long值,使Date表示该long值 * 所表示的时间 */ now.setTime(time); System.out.println(now); } }
SimpleDateFormat:
1.构造函数里传入的是格式例如:“yyyy-MM-dd hh:mm:ss”
y:表示年
M:表示月
d:表示日
H:表示小时(12小时制)
h:表示小时(24小时制)
m:表示分钟
s:表示秒
2.String format(Date date)format
方法可以将给定的date对象说表示的时间按照SimpleDateFormat指定的日期格式转换为字符串
3.Date parse(String str)
将给定的字符串按照SimpleDateFormat指定的日期格式解析为一个Date对象。
4.注意!!!使用parse方法时要抛出异常
代码示例:
import java.text.SimpleDateFormat; import java.util.Date; /** * java.text.SimpleDateFormat * 根据一个给定日期格式将String与Date相互转换 * simple 简单的 * Format 格式 * @author Analyze * */ public class SimpleDateFormatDemo1 { public static void main(String[] args) { //当前系统时间 Date now=new Date(); System.out.println(now); /* * 2016-05-25 10:14:55 * yyy-MM-dd HH:mm:ss */ SimpleDateFormat sdf=new SimpleDateFormat("y-M-d H:m:s"); /* * Date->String * String format(Date date) * format方法可以将给定的date对象说表示的 * 时间按照SimpleDateFormat指定的日期格式 * 转换为字符串 */ String str=sdf.format(now); System.out.println(str); } }
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 从字符串转换为Date * Date parse(String str) * 将给定的字符串按照SimpleDateFormat指定的日期 * 格式解析为一个Date对象 * parse: 解析,从语法上分析 * @author Analyze * */ public class SimpleDateFormat2 { public static void main(String[] args) throws ParseException { String str="2008-08-08 20:08:08"; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //String->Date Date date =sdf.parse(str); System.out.println(date.toString()); } }
Calendar:
1.Calendar是一个借口,需要实现。常用的是阳历的实现(用Calendar的静态方法getInstance()方法)
Calendar c=Calendar.getInstance();
2.void set(int field,int value)
其中第一个参数为:时间分量,例如:年月,日等等
第二个参数为对应的值时间分量是一个int值,使用Calendar提供的常量
3.Calendar->Date
Date getTIme()
Calendar提供了方法gerTime,该方法 返回了一个Date对象,该对象表示的时间就是当前Calendar表示的时间
4.Date->Calendar
void setTime(Date date)
Calendar的setTime方法可以使当前Calendar表示给定的Date所表示的时间
5.int get(int field)
获取对应时间分量的值
!!!注意!!!在设置时,获取的月要加1,因为一月是0
因为美国是从星期天开始算起,所以1是星期天
6.getActualMaximum()
获取某一个时间分量所允许的最大值
7.!!!!注意!!例如:
在2017.03.29-31号
新建一个Calendar的単例
设置年:2017
设置月:2
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
得到日期为:3
例如:
在2017.03.01-28号
新建一个Calendar的単例
设置年:2017
设置月:2
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
得到日期为:28
原因:
1.Calendar类当你set的时候,并不会立即生效,set()方法是有延迟,就是当你写这么一段代码时
cal.set(Calendar.MONTH, 5); 它是没有立即生效的。
当调用get()、getTime()、getTimeInMillis()、add() 或 roll()方法时,
才会重新计算日历的时间值(以毫秒为单位)。
解决方法:
实例化Calendar之后,执行clear方法,清除Calendar中的缓存
8.Calendar中计算时间的方法
void add(int field,int value)
对指定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值
示例代码
import java.util.Calendar; import java.util.Date; /* * java.util.Calendar * 日历类 * 该类是一个抽象类,封装了对时间的相关操作 * 常用的实现类阳历 * 使用日历类是为了对时间进行相关操作 * 比如计算时间 */ public class CalendarDemo { public static void main(String[] args) { /** * 使用Calendar的静态方法创建实例 * 该方法会更具当前系统时间是在地区创建一个相应 * 的实现,通常是GregorianCalendar * 默认创建的日历实例表示当前系统时间 * * instance 实例 */ Calendar calendar=Calendar.getInstance(); /* * toString不能直观反映表示的日期 */ System.out.println(calendar); /* * caslendar与Date之间的转换 * * Calendar->Date * Date getTIme() * Calendar提供了方法gerTime,该方法 * 返回了一个Date对象,该对象表示的时间就是 * 当前Calendar表示的时间 */ Date date=calendar.getTime(); System.out.println(date); /* * Date->Calendar * void setTime(Date date) * Calendar的setTime方法可以使当前 * Calendar表示给定的Date所表示的时间 */ //Calendar也表示这一刻了 calendar.setTime(date); } }
import java.util.Calendar; /** * Calendar提供了针对不同时间分量单独设置值的方法 * void set(int field,int value) * 其中第一个参数为:时间分量,例如:年月,日等等 * 第二个参数为对应的值 * 时间分量是一个int值,使用Calendar提供的常量 * @author Analyze * */ public class CalendarDemo1 { public static void main(String[] args) { Calendar calendar=Calendar.getInstance(); System.out.println(calendar.getTime()); /* * 设置calendar,使其表示 * 2008-08-08 20:08:08 */ //设定年 calendar.set(Calendar.YEAR, 2008); System.out.println(calendar.getTime()); /* * 设置月 * 月从0开始,0表示一月 * 或者可以使用具体月的常量(英文单词) */ calendar.set(Calendar.MONTH,7); System.out.println(calendar.getTime()); /* * 设置日 * 对应的时间分量常用的: * DATE:月中天 * DAY_OF_MONTH:月中的天,与DATE一致 * DAY_OF_WEEK:周中的天,星期几 * DAY_OF_YEAR:年中的天 */ calendar.set(Calendar.DAY_OF_MONTH,8); System.out.println(calendar.getTime()); /* * 设置时 * HOUR:12小时制 * HOUR_OF_DAY:24小时制 */ calendar.set(Calendar.HOUR_OF_DAY,20); //设置分 calendar.set(Calendar.MINUTE, 8); //设置秒 calendar.set(Calendar.SECOND, 8); System.out.println(calendar.getTime()); } }```
import java.util.Calendar;
/**getActualMaximum()
* 获取某一个时间分量所允许的最大值
* @author Analyze
*
*Actual:实际的,真实的
*Maximum:最大的,极大地
*/
public class CalendarDamo4 {
public static void main(String[] args) { Calendar calendar=Calendar.getInstance(); //当月总共有多少天 int days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("最多有"+days+"天"); //查看2016年2月多少天 /*例如: 在2017.03.29-31号 新建一个Calendar的単例 设置年:2017 设置月:2 int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH) 得到日期为:3 例如: 在2017.03.01-28号 新建一个Calendar的単例 设置年:2017 设置月:2 int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH) 得到日期为:28 原因: 1.Calendar类当你set的时候,并不会立即生效,set()方法是有延迟,就是当你写这么一段代码时 cal.set(Calendar.MONTH, 5); 它是没有立即生效的。 当调用get()、getTime()、getTimeInMillis()、add() 或 roll()方法时, 才会重新计算日历的时间值(以毫秒为单位)。 解决方法: 实例化Calendar之后,执行clear方法,清除Calendar中的缓存 */ calendar.clear(); calendar.set(Calendar.MONDAY, 1); calendar.set(Calendar.YEAR,2016); int ss=calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println(ss); //今天总共多少天? days=calendar.getActualMaximum(Calendar.DAY_OF_YEAR); System.out.println(days); }
}
import java.util.Calendar;
/**
* Calendar中计算时间的方法
* void add(int field,int value)
* 对指定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值
* @author Analyze
*
*/
public class CalendarDamo5 {
public static void main(String[] args) { /* * 查看3年2个月零8天以后的日期 */ Calendar calendar=Calendar.getInstance(); //查看三年后 calendar.add(Calendar.YEAR, 3); System.out.println(calendar.getTime()); //查看两个月以后 calendar.add(Calendar.MONTH, 2); System.out.println(calendar.getTime()); //查看8天以后 calendar.add(Calendar.DAY_OF_YEAR, 8); System.out.println(calendar.getTime()); //查看五小时以前 calendar.add(Calendar.HOUR,-5); System.out.println(calendar.getTime()); /* * 当遇到类似的开发需求 * 要求用户输入一个日期,然后对该日期进行一系列的预算 * 再计算后的日期显示给用户时 * 流程如下 * 1.获取用户输入的日期字符串 * 2.使用SimpleDateFormat将其转换为Date * 3.创建一个Calendar,使其表示Date表示的日期 * 4.使用Calendar转换为一个Date * 5.将Calendar转换为Date * 6.使用SimpleDateFormat将Date转换为字符串后显示给用户 * */ }
}
“`
相关文章推荐
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- Java中关于时间的相关操作
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作地常用函数
- java中关于时间日期操作的常用函数(转摘)
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- 收藏:java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数(转摘)
- Java+Jsp:关于日期时间操作函数类全解
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数