您的位置:首页 > 编程语言 > Java开发

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中时间日期处理)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: