您的位置:首页 > 其它

对时间的各种操作

2018-08-22 18:22 99 查看

 java.util.Calendar 日历类
 Calendar是一个抽象类,规定了操作日期的相关方法。
 由于不同的日期历法对日期的计算不同,需要靠不同的子类去实现这些方法。
 常用的实现类:java.util.GregorianCalendar,即 阳历
 Calendar提供了一个静态方法:getInstance()可以获取一个当前系统所在地区适用的实现类,大部分获取的都是阳历实现类。 

[code]Calendar calendar = Calendar.getInstance();
/*
* toString可读性差
*/
System.out.println(calendar);

Calendar提供了一个可以转换为Date的方法:
Date getTime()   //将当前Calendar表示的时间以Date形式返回。

[code]Date date = calendar.getTime();
System.out.println(date);

也提供了一个可以让Calendar表示指定日期的方法:
void setTime(Date date)
是当前Calendar表示给定的Date所表示的日期

 

 Calendar的get方法
 int get(int field)    //该方法可以获取指定的时间分量所对应的值。
 时间分量是一个int值,不同值表示不同时间分量,无需记忆这些数具体是多少,Calendar提供了对应的常量。

[code]Calendar calendar = Calendar.getInstance();

//获取年
int year = calendar.get(Calendar.YEAR);

//获取月  月从0开始
int month = calendar.get(Calendar.MONTH)+1;

/*
* 获取日
* 和"天"相关的常量有:
* DAY_OF_MONTH:月中的天,就是俗称的"几号"
* DAY_OF_WEEK:周中的天,就是指星期几
* DAY_OF_YEAR:年中的天。
* DATE:与DAY_OF_MONTH意义相同。
*/
int date = calendar.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+date);

int h = calendar.get(Calendar.HOUR_OF_DAY);
int m = calendar.get(Calendar.MINUTE);
int s = calendar.get(Calendar.SECOND);
System.out.println(h+":"+m+":"+s);
/*
* 根据当前Calendar表示的日期获取指定时间分量
* 所允许的最大值
* 今年总共多少天?
*/
int days = calendar.getActualMaximum(
Calendar.DAY_OF_YEAR
);
System.out.println("今年共:"+days+"天");

Calendar的add方法
 void add(int field,int amount)
 对给定的时间分量加上指定的值,若给定的值为负数则是减去。

[code]Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
/*
* 查看3年2个月零25天以后所在周的周三是哪天?
*/
//加3年
calendar.add(Calendar.YEAR, 3);
//加2个月
calendar.add(Calendar.MONTH, 2);
//加25天
calendar.add(Calendar.DAY_OF_YEAR, 25);
System.out.println(calendar.getTime());

calendar.set(Calendar.DAY_OF_WEEK, 4);
System.out.println(calendar.getTime());

Calendar的set方法 

可以对指定时间分量设置对应的值:
void set(int field,int value)

[code]Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());

/*
* 设置Calendar为2008-08-08 20:08:08
*/
//设置年
calendar.set(Calendar.YEAR, 2008);
//设置月
calendar.set(Calendar.MONTH, Calendar.AUGUST);
//设置日
calendar.set(Calendar.DAY_OF_MONTH,8);

calendar.set(Calendar.HOUR_OF_DAY,20);
calendar.set(Calendar.MINUTE,8);
calendar.set(Calendar.SECOND,8);
System.out.println(calendar.getTime());

/*
* 设置为周4
* 按照西方的标准,一周的第一天为周日
*/
calendar.set(Calendar.DAY_OF_WEEK, 5);
System.out.println(calendar.getTime());

java.util.Date
Date的每一个实例用于表示一个确切的时间。内部维护的一个long值,该值为1970年1月1日 00:00:00到当前
Date所表示的时间之间所经过的毫秒。
 由于Date设计时存在时区问题,所以大部分操作时间的方法都被声明为过时的,不再建议使用。

[code]//默认实例化表示当前系统时间
Date date = new Date();
System.out.println(date);
//获取Date内部维护的long值
long time = date.getTime();

time += 1000*60*60*24;
//可以设置一个long指使Date表示该日期
date.setTime(time);

System.out.println(date);

 SimpleDateFormat的format 将给定的Date按照当前SDF指定的日期格式转换为对应内容的字符串

[code]Date date = new Date();
System.out.println(date);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String format(Date date)将给定的Date按照当前SDF指定的日期格式转换为对应内容的字符串
String str = sdf.format(date);
System.out.println(str);

 SimpleDateFormat的parse将一个字符串按照对应的日期格式解析为Date  需要抛异常

[code]public static void main(String[] args) throws ParseException {
String str = "2008-08-08 20:08:08";

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);

System.out.println(date);
}

输入自己的生日,然后经过程序计算,输出到今天为止一共活了多少天
例如:
1992-08-02
计算后输出到今天为止共活了xxxx天
再输出出生10000天的纪念日为哪天?
格式还是:yyyy-MM-dd

[code]Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的生日:");
String birthStr = scanner.nextLine();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birth = sdf.parse(birthStr);
Date now = new Date();

long time = now.getTime()-birth.getTime();
//换算成天
time = time/1000/60/60/24;
System.out.println("恭喜您!一共活了"+time+"天,请继续保持!");

//计算10000天纪念日
time = birth.getTime()+1000L*60*60*24*10000;
Date date = new Date(time);

String str = sdf.format(date);
System.out.println("您出生10000天的纪念日为:"+str);

计算商品促销日期
促销日计算规则:该商品过期日前两周的周三
程序启动后,要求用户输入商品的生产日期,格式为:yyyy-MM-dd
然后再输入保质期的天数
然后经过计算,输出该商品促销日期,输出的格式是:yyyy-MM-dd

[code]Scanner scanner = new Scanner(System.in);
System.out.println("请输入生产日期:");
String dateStr = scanner.nextLine();
System.out.println("请输入保质期天数:");
int days = Integer.parseInt(scanner.nextLine());
//得到生产日期的Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
//让Calendar表示生产日期
calendar.setTime(date);
//计算过期日
calendar.add(Calendar.DAY_OF_YEAR, days);
//减去2周
calendar.add(Calendar.DAY_OF_YEAR, -14);
//设置为当周的周三
calendar.set(Calendar.DAY_OF_WEEK, 4);

date = calendar.getTime();
String str = sdf.format(date);
System.out.println("促销日为:"+str);

 两个字符创类型的时间进行比较

[code]    //当前时间与过期时间进行比较
public static boolean warnning(String day,String period) throws ParseException{
int month = Integer.parseInt(period);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(day);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//加上周期(月),为到期日
calendar.add(Calendar.MONTH, month);
//设置为过期日的前15天
calendar.add(Calendar.DAY_OF_YEAR, -15);
//获取提醒的时间
date = calendar.getTime();
//提醒时间字符串
String time = sdf.format(date);
Date d = new Date();
//当前时间字符串
String now = sdf.format(d.getTime());
//比较时间
int result = time.compareTo(now);
if(result>=0){
//到了提醒时间
return true;
}else{
//没到提醒时间
return false;
}

}

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: