Java中时间

Posted elice丹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中时间相关的知识,希望对你有一定的参考价值。

/**

*观看API文档学习:Date中很多方法失效;Calendar顶替。

*

**/
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateDemo {
    public static void main(String[] args) throws ParseException {
       /**
        * 计算 "2012/3/17" "2012-5-28"间隔天数
        * 1.毫秒值获取相减
        * 2.获取毫秒值,字符串--》日期对象-->毫秒值
        */
       getDays();
    }
    public static void getSeconds(){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date date = df .parse("2017-06-25");
        //Date date1=new Date();
        Date date1 = df.parse("2017-06-24");
        Calendar cal = Calendar.getInstance();
        Calendar cal1=Calendar.getInstance();
        cal.setTime(date);
        cal1.setTime(date1);
        long timestamp = cal.getTimeInMillis();
        long timestamp1=cal1.getTimeInMillis();
        System.out.println(timestamp1-timestamp);       
    }  
    public static void getDays() throws ParseException{     
        String str_date1="2012/3/17";
        String str_date2="2012-5-28";
        //日期格式字符串解析成日期对象
        //1.自定义yyyy/MM/dd风格对象
        DateFormat dateFormat1=new SimpleDateFormat("yyyy/MM/dd");
        //2.定义一个默认风格
        DateFormat dateFormat2=DateFormat.getDateInstance(DateFormat.MEDIUM);
           //查错误验证  如果系统为英文默认是yy/mm/dd
            Date date=new Date();
            String str_date=dateFormat2.format(date);
            System.out.println(str_date);
        
        //3.对日期格式字符串进行解析
        Date date1=dateFormat1.parse(str_date1);
        Date date2=dateFormat2.parse(str_date2);
        //4.通过日期对象获取毫秒值
         long time1=date1.getTime();
         long time2=date2.getTime();
         //5.相减
         long time=Math.abs(time2-time1);
         //6.毫秒转day
         int day=(int) (time/1000/60/60/24);
        System.out.println(day);

    }
    public static void cal(){
        //演示日历
        Calendar ca=Calendar.getInstance();
    //    System.out.println(ca);
        //日历:将时间相关的东西以键值对的方式全部封装在一个map集合
        /*
         *
         * java.util.GregorianCalendar[time=1497856585181,areFieldsSet=true,
         * areAllFieldsSet=true,lenient=true,
         * zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
         * offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],
         * firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=5,WEEK_OF_YEAR=25,
         * WEEK_OF_MONTH=4,DAY_OF_MONTH=19,DAY_OF_YEAR=170,DAY_OF_WEEK=2,
         * DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=3,
         * HOUR_OF_DAY=15,MINUTE=16,SECOND=25,MILLISECOND=181,ZONE_OFFSET=28800000,DST_OFFSET=0]
         *
         */
        //对日历对象其中的日期进行定义
          //ca.set(Calendar.YEAR, 2015);
          //ca.set(2012, 2, 2);
        //日期偏移
        //ca.add(Calendar.YEAR, -4);
        //日期偏移比较狠
        //ca.add(Calendar.MONTH, 7);
        //showDate(ca);
        //任意一年2月有多少天?3月1日的前一天。
       //int year=2014;
       //ca.set(year, 2,1);
       //ca.add(Calendar.DAY_OF_MONTH, -1);
      // showDate(ca);
       //获取昨天的现在时刻。
        ca.add(Calendar.DAY_OF_MONTH, -1);
        showDate(ca);
    }
    public static void showDate(Calendar ca){ 
        int year=ca.get(Calendar.YEAR);
        int month=ca.get(Calendar.MONTH)+1;
        int day=ca.get(Calendar.DAY_OF_MONTH);
        int week=ca.get(Calendar.DAY_OF_WEEK);
        System.out.println(year+"年"+month+"月"+day+"日"+week);
        
    }
    public static void date() {
        Date date = new Date();
        System.out.println(date);
        // 格式化--日期转文本 解析--文本转日期
        // DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。
        // 格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。
        // 通过DateFormat类中的静态工厂方法获取实例

        DateFormat df = DateFormat.getDateInstance();

        // 如果格式一般我们还可以加入style
        df = DateFormat.getDateInstance(DateFormat.SHORT);
        // FULL:2017年6月19日 星期一
        // Long:2017年6月19日
        // MEDIUM:2017-6-19
        // SHORT:17-6-19
        // 转成自定义格式 XXXX/XX/XX 只能自定义对象 .使用子类//去SimpleDateFormat类总找日期和时间模式

        df = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");

        // 日期+时间
        DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.FULL,
                DateFormat.FULL);
        String dateformat1 = df1.format(date);
        System.out.println(dateformat1);

        // 使用DateFormat的format方法对日期对象进行格式化

        String dateformat = df.format(date);
        System.out.println(dateformat);
    }
    public static void date2() {
        // 毫秒值--》日期对象 构造函数 setTime方法
        long time = System.currentTimeMillis();
        System.out.println(time);
        Date date = new Date(time);
        System.out.println(date);
        DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
        String df_date = df.format(date);
        System.out.println(df_date);
        // 日期对象--》毫秒值 计算时间差 (时间戳)
        long time1 = date.getTime();
        System.out.println(time1);
    }
    public static void date1() throws ParseException {
        Date date = new Date();
        System.out.println(date);// 后台输出系统时间 但是格式看不懂
        // 格式转化 xxxx-yy-mm
        String str = "2016-09-07";
        DateFormat df = DateFormat.getDateInstance();

        Date date1 = df.parse(str);
        System.out.println(date1);
    }
}

以上是关于Java中时间的主要内容,如果未能解决你的问题,请参考以下文章

Java中时间类的处理

java中时间类型转换

java中时间类的详细总结

java中时间和日期的操作

java中时间计算问题

Java中时间格式处理,指定N天/小时等之后的时间