对时间的各种操作
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; } }
阅读更多
- 对时间的各种操作
- 常见的各种操作延迟时间
- 典型 PC 系统各种操作指令的大概时间
- 各种数据结构insert和search操作的平均时间复杂度比较
- 典型PC机上各种操作的近似时间
- 含有min()函数的栈,各种操作时间复杂度为O(1)
- 含有min()函数的栈,各种操作时间复杂度为O(1)
- 典型 PC 系统各种操作指令的大概时间
- 含有min()函数的栈,各种操作时间复杂度为O(1)
- 各种序列化反序列化操作时间对比
- 关于时间的各种操作(转载)
- 各种排序算法的时间性能比较
- Asp操作Cookies(设置[赋值]、读取、删除[设置过期时间])
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
- 数据库中的各种约束以及对约束的操作
- 非常有用的Java日期时间操作函数代码一览
- MFC中对话框的各种消息触发时间
- Java多种方式读文件,追加文件内容,等对文件的各种操作
- java实现对文件的各种操作(转)
- delphi 各种时间类型之间的转换函数