您的位置:首页 > 其它

日期处理常用类:Data、Calendar和SimpleDateFormat

2018-02-03 17:39 579 查看

一、Date

从 JDK 1.1 开始,应该使用Calendar类实现日期和时间字段之间转换,使用DateFormat 类来格式化和分析日期字符串,Date 中的相应方法已废弃。
构造方法:
1.Date() 分配 Date 对象并以当前时间初始化此对象
2.Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(即1970年1月1日 00:00:00 GMT)以来的指定毫秒数。
常用方法:
1.long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 
2.void setTime(long time) 设置此 Date 对象,以表示1970年1月1日00:00:00 GMT 以后time毫秒的时间点。 

二、Calendar

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
  字段摘要:  
1.static int DATE get 和 set 的字段数字,指示一个月中的某天。 
2.static int DAY_OF_MONTH get 和 set 的字段数字,指示一个月中的某天。 
3.static int DAY_OF_WEEK get 和 set 的字段数字,指示一个星期中的某天。 
4.static int DAY_OF_WEEK_IN_MONTH get 和 set 的字段数字,指示当前月中的第几个星期。 
5.static int DAY_OF_YEAR get 和 set 的字段数字,指示当前年中的天数。  
6.static int ERA 指示年代的 get 和 set 的字段数字,比如罗马儒略历中的 AD 或 BC。 
7.protected  int[] fields 此日历当前设置时间的日历字段值。 
8.static int HOUR get 和 set 的字段数字,指示上午或下午的小时。 
9.static int HOUR_OF_DAY get 和 set 的字段数字,指示一天中的小时。  
10.static int MILLISECOND get 和 set 的字段数字,指示一秒中的毫秒。 
11.static int MINUTE get 和 set 的字段数字,指示一小时中的分钟。 
12.static int MONTH 指示月份的 get 和 set 的字段数字。 
13.static int PM 指示从中午到午夜之前这段时间的 AM_PM 字段值。 
14.static int SECOND get 和 set 的字段数字,指示一分钟中的秒。 
15.protected  long time 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。 
16.static int WEEK_OF_MONTH get 和 set 的字段数字,指示当前月中的星期数。 
17.static int WEEK_OF_YEAR get 和 set 的字段数字,指示当前年中的星期数。 
18.static int YEAR 指示年的 get 和 set 的字段数字。  
常用方法:
1.void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。 
2.Date getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
3.void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。  
4. void set(int field, int value) 将给定的日历字段设置为给定值。
5.int get(int field) 返回给定日历字段的值。 
6.abstract void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。  

  7.long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位。 
8.void setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值。
9.void setFirstDayOfWeek(int value) 设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。 
10. int getFirstDayOfWeek() 获得一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。 
11. void clear(int field) 将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 
12.void clear() 将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 

三、SimpleDateFormat

构造方法:
1.SimpleDateFormat() 用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。 
2.SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。 
3.SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) 用给定的模式和日期符号构造 SimpleDateFormat。 
4.SimpleDateFormat(String pattern, Locale locale) 用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat。
日期和时间模式:
G  纪元标志符 
y  年 
M  年中的月份 
D  年中的天数 
d  月份中的天数 
F  月份中的星期
E  星期中的天数  
H  一天中的小时数(0-23) 
m  小时中的分钟数 
s  分钟中的秒数 
S  毫秒数 
常用方法:
1. StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) 将给定的 Date 格式化为日期/时间字符串,并将结果追加到给定的 StringBuffer。 
2.Date parse(String text, ParsePosition pos) 分析字符串的文本,生成 Date。
3.void applyPattern(String pattern) 将给定模式字符串应用于此日期格式。 


4000
习题:

1.打印当前时间格式:例如:2018-01-01 12:30:01

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test1 {
public static void main(String[] args) {
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(date);
System.out.println(s);

//或者
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
} 2.对当前日期减3天,打印日期,格式例如:2018/01/01-12:30:00
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Test2 {
public static void main(String[] args) {
Calendar cal=Calendar.getInstance();
cal.add(Calendar.DATE, -3);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
Date date=cal.getTime();
String s=sdf.format(date);
System.out.println(s);
}
} 3.对字符串“2017-12-30”进行日期处理,日期加3天,打印日期,格式例如2018/01/01
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Test3 {
public static void main(String[] args) {
String str="2017-12-30";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
Date d=sdf.parse(str);
Calendar cal=Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.DATE,3);
sdf.applyPattern("yyyy/MM/dd");
String s=sdf.format(cal.getTime());
System.out.println(s);
} catch (ParseException e) {

}
}
} 4.计算两个字符串相差多少天,字符串是“2017-12-30”和“2018/03/01”
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Test3 {
public static void main(String[] args) {
String str="2017-12-30";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
Date d=sdf.parse(str);
Calendar cal=Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.DATE,3);
sdf.applyPattern("yyyy/MM/dd");
String s=sdf.format(cal.getTime());
System.out.println(s);
} catch (ParseException e) {

}
}
} 5.在控制台输入年份和月份,打印这个月的日历。
import java.util.Calendar;
import java.util.Scanner;

public class PrintCalendar {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.print("请输入想要打印的年份和月份:");
int year=scan.nextInt();
int month=scan.nextInt();
Calendar c1=Calendar.getInstance();
c1.set(year,month-1,1);
//当月1号是周几,要注意周日是第一天(就像0表示1月一样)
int week=c1.get(Calendar.DAY_OF_WEEK)-1;
long start=c1.getTimeInMillis();
c1.add(Calendar.MONTH,1);
long end=c1.getTimeInMillis();
long days=(end-start)/(1000*60*60*24);//当月有多少天
System.out.println("一\t二\t三\t四\t五\t六\t日");
for(int i=1;i<=days+week-1;i++){
if(i<=week-1)
System.out.print(" \t");
else System.out.print((i-week+1)+"\t");
if(i%7==0)
System.out.println();
}
}
}

 

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐