0、目录
1、SimpleDateFormat 日期格式化类
2、日期转字符串
y 代表年
M 代表月
d 代表日
H 代表24进制的小时
h 代表12进制的小时
m 代表分钟
s 代表秒
S 代表毫秒
package date;
//
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
//y 代表年
//M 代表月
//d 代表日
//H 代表24进制的小时
//h 代表12进制的小时
//m 代表分钟
//s 代表秒
//S 代表毫秒
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
Date d= new Date();
String str = sdf.format(d);
System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd" );
Date d1= new Date();
String str1 = sdf1.format(d1);
System.out.println("当前时间通过 yyyy-MM-dd 格式化后的输出: "+str1);
}
}
- 输出结果
3、字符串转日期
模式(yyyy/MM/dd HH:mm:ss)需要和字符串格式保持一致,如果不一样就会抛出解析异常ParseException
package date;
//
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
String str = "2016/1/5 12:12:12";
try {
Date d = sdf.parse(str);
System.out.printf("字符串 %s 通过格式 yyyy/MM/dd HH:mm:ss %n转换为日期对象: %s",str,d.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4、练习:日期格式化
准备一个长度是9的日期数组
使用1970年-2000年之间的随机日期初始化该数组
按照这些日期的时间进行升序排序
比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大
package pack1;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateWork {
public static void main(String[] args) {
int num = 9;
String[] str = new String[num];
long second = 1000l;
long minute = 60*second;
long hour = 60*minute;
long day = 24*hour;
long year = 365*day;
long leapYear = 0;
//判断从1970-2000有一年闰年就是多了几天!
for(int i=1970; i<2000; i++) {
if(i%4==0 && i%100!=0 || i%100==0 && i%400!=0) {
leapYear += day;
}
}
long year2000 = 2000*year - 1970*year + leapYear;
long cha = year2000 - 1970*year;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS");
System.out.println("未排序之前***************************");
System.out.println("");
for(int i=0; i<num; i++) {
long randomDate = (long)(Math.random()*(1970*year+(cha-8*hour)));
Date date = new Date(randomDate);
String str2 = sdf.format(date);
str[i] = str2;
System.out.print(str[i]+" ");
if((i+1)%3 == 0) {
System.out.println("");
System.out.println("");
}
}
//冒泡排序进行重新排序;
//重新格式化时间yyyyMMdd
System.out.println("排序后的结果是****************************");
System.out.println();
for(int i=0; i<str.length; i++) {
for(int j=i+1; j<str.length; j++) {
if(str[i].compareTo(str[j])>0) {
String temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
System.out.print(str[i]+" ");
if((i+1)%3 == 0) {
System.out.println();
System.out.println();
}
}
}
}
- 输出结果
5、Calendar
Calendar类即日历类,常用于进行“翻日历”,比如下个月的今天是多久
6、Calendar与Date进行转换
采用单例模式获取日历对象Calendar.getInstance();
package date;
//
import java.util.Calendar;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
//采用单例模式获取日历对象Calendar.getInstance();
Calendar c = Calendar.getInstance();
//通过日历对象得到日期对象
Date d = c.getTime();
Date d2 = new Date(0);
c.setTime(d2); //把这个日历,调成日期 : 1970.1.1 08:00:00
}
}
7、翻日历
add方法,在原日期上增加年/月/日
set方法,直接设置年/月/日
package date;
import java.text.SimpleDateFormat;
//
import java.util.Calendar;
import java.util.Date;
public class TestDate {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
Date now = c.getTime();
// 当前日期
System.out.println("当前日期:\t" + format(c.getTime()));
// 下个月的今天
c.setTime(now);
c.add(Calendar.MONTH, 1);
System.out.println("下个月的今天:\t" +format(c.getTime()));
// 去年的今天
c.setTime(now);
c.add(Calendar.YEAR, -1);
System.out.println("去年的今天:\t" +format(c.getTime()));
// 上个月的第三天
c.setTime(now);
c.add(Calendar.MONTH, -1);
c.set(Calendar.DATE, 3);
System.out.println("上个月的第三天:\t" +format(c.getTime()));
}
private static String format(Date time) {
return sdf.format(time);
}
}
8、练习:Calendar
找出下个月的倒数第3天是哪天
package charactor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
public class TestDate {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String args[]){
Calendar c = Calendar.getInstance();
Date now = c.getTime();
// 当前日期
System.out.println("当前日期:\t" + format(c.getTime()));
// 下个月的今天
c.setTime(now);
c.add(Calendar.MONTH, 1);
System.out.println("下个月的今天:\t" +format(c.getTime()));
// 去年的今天
c.setTime(now);
c.add(Calendar.YEAR, -1);
System.out.println("去年的今天:\t" +format(c.getTime()));
// 上个月的第三天
c.setTime(now);
c.add(Calendar.MONTH, -1);
c.set(Calendar.DATE, 3);
System.out.println("上个月的第三天:\t" +format(c.getTime()));
}
private static String format(Date time) {
return sdf.format(time);
}
}
- 输出结果