博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java日期时间处理
阅读量:2387 次
发布时间:2019-05-10

本文共 4383 字,大约阅读时间需要 14 分钟。

  • Java日期时间

Date类、Calendar类、DateFormat类、Long、String

Time/Date/Calendar

 

在8之前,我们最常见的时间与日期处理相关的类就是 Date、Calendar 以及 SimpleDateFormatter 等等。不过.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){
//涉及到DateCalendar的转换
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中时间日期处理)

你可能感兴趣的文章
强大的CSS:placeholder-shown伪类实现Material Design占位符交互效果
查看>>
强大的CSS:图形绘制合集,方便你我!
查看>>
强大的CSS:scroll-snap滚动事件停止及元素位置检测
查看>>
程序员30岁前,月薪达不到30K,该何去何从?
查看>>
只要记住这五点,学习任何新编程语言都不是问题
查看>>
常见的前端开发CSS 面试题及回答策略
查看>>
缺前端是假的,缺优秀前端是真的
查看>>
前端入门那么容易,工作很难找吗?
查看>>
Web前端很难学?html、css t、JavaScrip知识架构图分享
查看>>
常见的前端开发:Javascript 面试题及回答策略
查看>>
web前端开发学习推荐这5本书
查看>>
Windows资源管理器相关信息获取
查看>>
windows资源管理器及ie监听
查看>>
No module named 'Crypto'
查看>>
常用openstack的镜像下载及密码
查看>>
详解python中的浅拷贝和深拷贝
查看>>
详解python中闭包和装饰器
查看>>
修改openstack云主机的IP地址
查看>>
ubuntu系统的定制裁剪(适用于嵌入式瘦客户端)
查看>>
嵌入式之系统移植详解(linux)
查看>>