Java日期时间处理
2017-09-05 11:38
309 查看
Java日期时间
Date类、Calendar类、DateFormat类、Long、String
Time/Date/Calendar
在Java 8之前,我们最常见的时间与日期处理相关的类就是 Date、Calendar 以及 SimpleDateFormatter 等等。不过Java.util.Date
也是被诟病已久,它包含了日期、时间、毫秒数等众多繁杂的信息,其内部利用午夜 12 点来区分日期,利用 1970-01-01 来计算时间;并且其月份从 0 开始计数,而且用于获得年、月、日等信息的接口也是太不直观。除此之外,java.util.Date与 SimpleDateFormatter 都不是类型安全的,而 JSR-310 中的 LocalDate 与 LocalTime 等则是不变类型,更加适合于并发编程。JSR 310 实际上有两个日期概念。第一个是 Instant,它大致对应于 java.util.Date
类,因为它代表了一个确定的时间点,即相对于标准 Java 纪元(1970年1月1日)的偏移量;但与 java.util.Date 类不同的是其精确到了纳秒级别。另一个则是 LocalDate、LocalTime 以及 LocalDateTime 这样代表了一般时区概念、易于理解的对象。
Java中获取当前日期和时间很简单,使用Date对象的 toString()方法来打印当前日期和时间
使用SimpleDateFormat格式化日期
SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。
Java 休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用,目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
//获取当前时间
public class TimeTest {
public static void main(String [] args){
long now = System.currentTimeMillis();//毫秒数
System.out.println("now = " + now);
Date date = new Date(now);
System.out.println("date = " + date);
Calendar calendar = Calendar.getInstance();
System.out.println("calendar = " + calendar.getTime().toString());
}
}
now = 1504578534859
date = Tue Sep 05 10:28:54 CST 2017
calendar = Tue Sep 05 10:28:54 CST 2017
时间日期处理的思路:
时间日期的应用
获得完整时间
时间日期的格式化
时间日期的转换
String-->日期,日期-->String
public static void main(String [] args)
throws ParseException{
Date date = new Date(System.currentTimeMillis());
Calendar calendar = Calendar.getInstance();
//格式化
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("格式化前date = " + date.toString());
System.out.println("格式化后date = " + simpleDateFormat.format(date));
//String与Date的转化
String dateString =
"2017-09-05";
SimpleDateFormat simpleDateFormat2 =
new SimpleDateFormat("yyyy-MM-dd");
Date date2 = simpleDateFormat2.parse(dateString);
System.out.println("String转换为Date,date2 = " + date2.toString());
//Date类型转换为String类型
String dateString2 = simpleDateFormat2.format(date2);
System.out.println("Date转换为String,dateString2 = " + dateString2);
//Calendar与Date的转换
calendar.setTime(date2);
System.out.println("calendar = " + calendar.getTime().toString());
Calendar calendar2 = Calendar.getInstance();
Date date3 = calendar2.getTime();
System.out.println("date3 = " + date3);
}
格式化前date = Tue Sep 05 10:36:32 CST 2017
格式化后date = 2017-09-05 10:36:32
String转换为Date,date2 = Tue Sep 05 00:00:00 CST 2017
Date转换为String,dateString2 = 2017-09-05
calendar = Tue Sep 05 00:00:00 CST 2017
date3 = Tue Sep 05 10:36:32 CST 2017
Java时间处理
格式化时间/获取当前时间/获取年份,月份/时间戳转换成时间
//格式化时间(SimpleDateFormat)
//使用 SimpleDateFormat 类的 format(date) 方法来格式化时间
Date date = new Date();
String strDateFormat = "yyyy-MM-dd HH:mm:ss";//定义日期格式
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
System.out.println(sdf.format(date));
//获取年份、月份等 ,使用 Calendar 类来输出年份、月份等
Calendar cal = Calendar.getInstance();//创建日期类对象
int day = cal.get(Calendar.DATE);
int month = cal.get(Calendar.MONTH) + 1;
int year = cal.get(Calendar.YEAR);
int dow = cal.get(Calendar.DAY_OF_WEEK);
int dom = cal.get(Calendar.DAY_OF_MONTH);
int doy = cal.get(Calendar.DAY_OF_YEAR);
//实现指定日期的前几天提醒功能
public static void main(String [] args)
throws ParseException{
//设定生日,String
String birthday =
"2017-11-2";
//将String类型转换为Date类型(日期)
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse(birthday);
//对日期进行计算
Date date2 = prepareBirthDay(date);
//将计算后的结果,转换成String类型,输出
String birthday2 = simpleDateFormat.format(date2);
System.out.println(birthday +
"提前两周的周六为:" + birthday2);
}
/*
* 传入一个日期,计算出该日期的两个星期前的周六的日期
* @patam birthday 传入的日期
* @return 两周前的周六的日期
*/
public static Date prepareBirthDay(Date birthday){
//涉及到Date与Calendar的转换
Calendar calendar = new GregorianCalendar();
calendar.setTime(birthday);//接收传入的date日期,转换成Calendar
calendar.add(Calendar.WEEK_OF_MONTH, -2);//提前两周
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);//调整为当前星期的周六
return calendar.getTime();
}
参考地址
http://blog.csdn.net/w1014074794/article/details/52278578 http://blog.csdn.net/u013604031/article/details/49812941(Java8中时间日期处理)
Date类、Calendar类、DateFormat类、Long、String
Time/Date/Calendar
在Java 8之前,我们最常见的时间与日期处理相关的类就是 Date、Calendar 以及 SimpleDateFormatter 等等。不过Java.util.Date
也是被诟病已久,它包含了日期、时间、毫秒数等众多繁杂的信息,其内部利用午夜 12 点来区分日期,利用 1970-01-01 来计算时间;并且其月份从 0 开始计数,而且用于获得年、月、日等信息的接口也是太不直观。除此之外,java.util.Date与 SimpleDateFormatter 都不是类型安全的,而 JSR-310 中的 LocalDate 与 LocalTime 等则是不变类型,更加适合于并发编程。JSR 310 实际上有两个日期概念。第一个是 Instant,它大致对应于 java.util.Date
类,因为它代表了一个确定的时间点,即相对于标准 Java 纪元(1970年1月1日)的偏移量;但与 java.util.Date 类不同的是其精确到了纳秒级别。另一个则是 LocalDate、LocalTime 以及 LocalDateTime 这样代表了一般时区概念、易于理解的对象。
Java中获取当前日期和时间很简单,使用Date对象的 toString()方法来打印当前日期和时间
使用SimpleDateFormat格式化日期
SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。
Java 休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用,目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
//获取当前时间
public class TimeTest {
public static void main(String [] args){
long now = System.currentTimeMillis();//毫秒数
System.out.println("now = " + now);
Date date = new Date(now);
System.out.println("date = " + date);
Calendar calendar = Calendar.getInstance();
System.out.println("calendar = " + calendar.getTime().toString());
}
}
now = 1504578534859
date = Tue Sep 05 10:28:54 CST 2017
calendar = Tue Sep 05 10:28:54 CST 2017
时间日期处理的思路:
时间日期的应用
获得完整时间
时间日期的格式化
时间日期的转换
String-->日期,日期-->String
public static void main(String [] args)
throws ParseException{
Date date = new Date(System.currentTimeMillis());
Calendar calendar = Calendar.getInstance();
//格式化
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("格式化前date = " + date.toString());
System.out.println("格式化后date = " + simpleDateFormat.format(date));
//String与Date的转化
String dateString =
"2017-09-05";
SimpleDateFormat simpleDateFormat2 =
new SimpleDateFormat("yyyy-MM-dd");
Date date2 = simpleDateFormat2.parse(dateString);
System.out.println("String转换为Date,date2 = " + date2.toString());
//Date类型转换为String类型
String dateString2 = simpleDateFormat2.format(date2);
System.out.println("Date转换为String,dateString2 = " + dateString2);
//Calendar与Date的转换
calendar.setTime(date2);
System.out.println("calendar = " + calendar.getTime().toString());
Calendar calendar2 = Calendar.getInstance();
Date date3 = calendar2.getTime();
System.out.println("date3 = " + date3);
}
格式化前date = Tue Sep 05 10:36:32 CST 2017
格式化后date = 2017-09-05 10:36:32
String转换为Date,date2 = Tue Sep 05 00:00:00 CST 2017
Date转换为String,dateString2 = 2017-09-05
calendar = Tue Sep 05 00:00:00 CST 2017
date3 = Tue Sep 05 10:36:32 CST 2017
Java时间处理
格式化时间/获取当前时间/获取年份,月份/时间戳转换成时间
//格式化时间(SimpleDateFormat)
//使用 SimpleDateFormat 类的 format(date) 方法来格式化时间
Date date = new Date();
String strDateFormat = "yyyy-MM-dd HH:mm:ss";//定义日期格式
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
System.out.println(sdf.format(date));
//获取年份、月份等 ,使用 Calendar 类来输出年份、月份等
Calendar cal = Calendar.getInstance();//创建日期类对象
int day = cal.get(Calendar.DATE);
int month = cal.get(Calendar.MONTH) + 1;
int year = cal.get(Calendar.YEAR);
int dow = cal.get(Calendar.DAY_OF_WEEK);
int dom = cal.get(Calendar.DAY_OF_MONTH);
int doy = cal.get(Calendar.DAY_OF_YEAR);
//实现指定日期的前几天提醒功能
public static void main(String [] args)
throws ParseException{
//设定生日,String
String birthday =
"2017-11-2";
//将String类型转换为Date类型(日期)
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse(birthday);
//对日期进行计算
Date date2 = prepareBirthDay(date);
//将计算后的结果,转换成String类型,输出
String birthday2 = simpleDateFormat.format(date2);
System.out.println(birthday +
"提前两周的周六为:" + birthday2);
}
/*
* 传入一个日期,计算出该日期的两个星期前的周六的日期
* @patam birthday 传入的日期
* @return 两周前的周六的日期
*/
public static Date prepareBirthDay(Date birthday){
//涉及到Date与Calendar的转换
Calendar calendar = new GregorianCalendar();
calendar.setTime(birthday);//接收传入的date日期,转换成Calendar
calendar.add(Calendar.WEEK_OF_MONTH, -2);//提前两周
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);//调整为当前星期的周六
return calendar.getTime();
}
参考地址
http://blog.csdn.net/w1014074794/article/details/52278578 http://blog.csdn.net/u013604031/article/details/49812941(Java8中时间日期处理)
相关文章推荐
- Java 时间与日期处理
- JAVA处理日期时间的方法介绍 3
- Java中日期时间的处理
- java中的日期时间处理
- java Date 时间 日期 处理
- JAVA面试题解惑系列(七)——日期和时间的处理
- Java 时间日期处理:取某一时间,Date转字符串,计算时间差,时间比较大小
- JAVA面试题解惑系列(七)——日期和时间的处理
- JAVA处理日期时间常用方法
- Java知识(时间和日期处理)
- 如何在Java 8中愉快地处理日期和时间
- Java日期时间处理
- 如何在Java 8中愉快地处理日期和时间
- Java日期时间处理
- java的日期时间处理自定义类
- java日期时间处理工具类封装
- java处理日期时间
- java处理日期时间 相加减
- JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。
- java中时间跟日期处理的小记