博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java日期时间处理
阅读量:4325 次
发布时间:2019-06-06

本文共 5211 字,大约阅读时间需要 17 分钟。

本文详细讲解了日期、时间的处理,非常实用。文章系转载,地址:http://www.cnblogs.com/hqr9313/archive/2012/04/19/2458221.html

时间日期

1)java中的时间类有:Date和Calendar
2)java中时间类的本质 long(毫秒数)
  Date = long +历法算法(方法getYear())
  Calendar = long +历法算法(方法get())
3) 时间的标准有两种
 (1970)GMT long
 (0)UTC long
4) java中基本的时间表示GMT long
5) java提供了Date类型表示时间和日期
   Date 是long 类型的包装
6) Calendar 是历法的抽象
 历法:公历,农历,太阳历
7) GregorianCalendar是历法的实现,采用公历的算法实现的
   Calendar cal = Calendar.getInstance();
   Calendar cal = new GregorianCalendar();//除了日本和泰国,效果等同于上一句
8) Date和 Calendar的默认值就是系统当前时间

一、 java中表示时间的方式:

1) 格林威治时间(GMT):1970年1月1日 00:00:00(注:中国是东八区,所以要+8个小时)
  也就是1970年1月1日 08:00:00
2 )公元元年(UTC): 0年
3 )目前java中3种日期表达方式long, Date , Calendar都在用

实例:

import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class LongDateDemo { public static void main(String[] args) {  long now = System.currentTimeMillis();  long year = now/1000/60/60/24/365 +1970;  System.out.println(year);  //一年 地球绕太阳一圈(365天+1/4天)  //原点(公元元年)    /* date.getYear()是将date内部的long时间,根据历法计算   * 为年份,返回值是2位数年份,如:1997年返回97,但是过了   * 2K年,返回3位数年份,如2012返回112   */    //老板本  Date date = new Date();//默认是当前时间(long)  int y = date.getYear()+1900;  int month = date.getMonth()+1;  System.out.println(y+"年"+month+"月");    //新版本  //Calendar 历法  Calendar cal = new GregorianCalendar();//默认是当前时间(long)  y = cal.get(Calendar.YEAR);//2012  month = cal.get(Calendar.MONTH)+1;//4  System.out.println(y+"年"+month+"月"); }}
二 时间类型转换  long <-> Date <-> Calendar
 long --->Date :  dat = new Date(l)
       dat.setTime(l)
 Date --->Calendar : cal.setTime(dat)
 Calendar ---> Date: cal.getTime()
 Date ---> long :dat.getTime()
 注:Date dat  ,  long l  ,Calendar cal
例子

import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;/** * 时间的类型转换 */public class DateCaseDemo { public static void main(String[] args) {  long gmt = 0;//格林威治时间 1970/01/01  Date date = new Date();  date.setTime(gmt);//回到1970 元旦,相当于long -->Date  System.out.println(date.getYear()+1900);//1970  Calendar cal = new GregorianCalendar();  //date --> cal  cal.setTime(date);//将cal设置为date的时间,也是1970  System.out.println(cal.get(Calendar.YEAR));//1970  //date 和 cal ,gmt 代表同一时刻  //加-1天,是在当前时间上加-1天,就是减少1天,就是减少1天的毫秒数(1000*60*60*24)  cal.add(Calendar.DAY_OF_YEAR,-1);  Date d = cal.getTime();  System.out.println(d);//1969  long l = d.getTime();  System.out.println(l);//-86400000,因为是在原点以前的时间 }}
三 时间的输入与输出
1)  日期输出的本质是将Date转换为格式化的String
2)  日期输入的本质是将格式化的 String转换为 Date
3)  SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   构建SimpleDateFormat 一般提供日期的格式"yyyy-MM-dd"具体参看javadoc
    如:"yyyy-MM-dd HH:mm:ss"
     "yyyyMMdd"
     "dd/MM/yy"
     "MM/dd/yyyy"
常用方法
 fmt.parse(String)    可以实现将(合法)字符串解析为日期类型,经常用于处理日期输入
 fmt.format(Date)     可以把日期格式化为字符串用于输出处理
使用字符串String输出时间
  Date ---> String:
  DateFormat fmt = new SimpleDateFormat("HH:mm:ss");
  fmt.format(date)
把字符串String时间转为Date时间(个是必须相同)
  String --> Date :
  DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
  fmt.parse("1999-2-2")
注: java没有提供String直接转换为Calendar的API方法,但第三方提供的API有这种方法
 如果Calendar需要转为String,必须先转换为Date
 Calendar ----> Date : 
 Date dat = cal.getTime();

示例:

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateIODemo { public static void main(String[] args) throws ParseException {  Date date = new Date();//当前时间,当前毫秒数  //输出yyyy-MM-dd HH:mm:ss  SimpleDateFormat fmt =    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //将日期类型格式化为时间字符串  String str = fmt.format(date);//日期格式化  System.out.println(str);//2012-12-21 00:00:00  //解析日期字符串为日期类型对象  String day = "2012-12-21";  SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");  Date d = f.parse(day);//将日期字符串解析为毫秒数  long l = d.getTime();  System.out.println(fmt.format(d));  String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date());  System.out.println(s);//2012-04-18 }}

四 时间的计算

 时间计算的问题
 1)   本质是时间毫秒数的计算
 2) 简单时间计算,直接计算毫秒数,如:3天以后,2小时等
 3) 复杂时间计算,利用Calender类提供的历法算法实现
常用方法:
     add() set()
     Calendar 提供的方法本是上也是计算毫秒数

/**   例子1*/import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class DateCalDemo { public static void main(String[] args) {  //简单时间计算  long l = System.currentTimeMillis();//当前时间  l += 1000L*60*60*24*3;//3天以后  SimpleDateFormat sdm = new SimpleDateFormat("yyyy-MM-dd");    String s = sdm.format(new Date(l));  System.out.println(s);  //复杂时间计算  Calendar cal = new GregorianCalendar();  cal.add(Calendar.YEAR, 2);//2年以后  cal.set(Calendar.MONTH,Calendar.JANUARY);//设置月份为1月  System.out.println(sdm.format(cal.getTime()));//2年以后的1月 }}/**   例子2*/import java.util.Calendar;import java.util.Date;public class SpecialDateDemo { public static void main(String[] args) { } /**  * 计算商品的促销日期special Date,规则:商品过期前两周五促销   * @param creat  * @param months  * @return  */ public static Date special(Date creat,int months){  Calendar cal = Calendar.getInstance();  cal.setTime(creat); //生产日期  cal.add(Calendar.MONTH, months);  //过期日  cal.add(Calendar.WEEK_OF_YEAR, -2);  //回调2周  if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){//如果是星期天   cal.add(Calendar.WEEK_OF_YEAR, -1);//回调一周   cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);//调到本周的周五  }  return cal.getTime(); }}

转载于:https://www.cnblogs.com/hehe520/p/6330040.html

你可能感兴趣的文章
对innodb 拷贝文件实现数据库的方式(转)
查看>>
python知识点 2014-07-09
查看>>
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
阶段3 2.Spring_01.Spring框架简介_03.spring概述
查看>>
阶段3 2.Spring_02.程序间耦合_1 编写jdbc的工程代码用于分析程序的耦合
查看>>
阶段3 2.Spring_01.Spring框架简介_04.spring发展历程
查看>>
阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1
查看>>
阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
查看>>
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门
查看>>
阶段3 2.Spring_04.Spring的常用注解_3 用于创建的Component注解
查看>>