• java基础--日期--练习集锦


    题目1 --日期

    借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期

    package date;
     
    import java.util.Date;
     
    public class TestDate {
        
        public static void main(String[] args) {
            long second = 1000;
            long minute = 60*second;
            long hour = minute * 60;
            long day = hour*24;
            long year = day * 365;
            long year1995Start  = (1995-1970) * year;
            long leapDay = (1995-1970)/4*day; //每隔4年有一个润日
            year1995Start+=leapDay;
            long eightHour = hour*8; //8个小时的毫秒数,因为从0毫秒对应的是1970.1.1 08:00:00
            year1995Start-=eightHour;
             
            Date dStart = new Date(year1995Start);
            System.out.println("1995年第一天:"+dStart);
            long year1995End = year1995Start + year - 1;
            Date dEnd = new Date(year1995End);
            System.out.println("1995年最后一天:"+dEnd);
             
            long randomTime = (long) (Math.random()*(year-1) + year1995Start);
            Date dRandom = new Date(randomTime);
            System.out.println("1995年这一年中的一个随机时间:" + dRandom);
              
        }
    }
    

    笔记

    SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
    String str = "2016/1/5 12:12:12";
    Date d = sdf.parse(str);
    字符串对象有一个parse(str) 可以转成Date 对象

    Date对象转字符串:
    SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
    Date d= new Date();
    String str = sdf.format(d);

    题目2--日期格式化

    准备一个长度是9的日期数组
    使用1970年-2000年之间的随机日期初始化该数组
    按照这些日期的时间进行升序排序
    比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大

    package date;
     
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    public class TestDate {
     
        public static void main(String[] args) {
            int yearStart = 1970;
            int yearEnd = 2000;
     
            Date[] ds = new Date[9];
            for (int i = 0; i < ds.length; i++) {
                ds[i] = getRandomDate(yearStart, yearEnd);
            }
             
            System.out.println("得到的随机日期数组:");
            for (int i = 0; i < ds.length; i++) {
                System.out.print(toString(ds[i])+"	");
                if(2==i%3)
                    System.out.println();
            }
             
            //选择法排序
            for (int j = 0; j < ds.length-1; j++) {
                for (int i = j+1; i < ds.length; i++) {
                    String strTimeI = toString(ds[i],"HHmmss");
                    String strTimeJ = toString(ds[j],"HHmmss");
     
                    int lTimeI = Integer.parseInt(strTimeI);
                    int lTimeJ = Integer.parseInt(strTimeJ);
     
                    if( lTimeI<lTimeJ  ){  
                        Date temp = ds[j];
                        ds[j] = ds[i];
                        ds[i] = temp;
                    }
                }
            }      
             
            System.out.println("排序后的随机日期数组:");
            for (int i = 0; i < ds.length; i++) {
                System.out.print(toString(ds[i])+"	");
                if(2==i%3)
                    System.out.println();
            }
             
        }
     
        public static String toString(Date d) {
            return toString(d, "yyyy-MM-dd HH:mm:ss");
        }
     
        public static String toString(Date d, String format) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(d);
        }
     
        private static Date getRandomDate(int yearStart, int yearEnd) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
            try {
                Date dStart = sdf.parse(String.valueOf(yearStart)); // 1970
                Date dEnd = sdf.parse(String.valueOf(yearEnd + 1)); // 2001 不是 2000,要在2001的基础上减少以毫秒,才表示2000最后一刻
                long timeStart = dStart.getTime();
                long timeEnd = dEnd.getTime() - 1;
                long timeRandom = (long) (timeStart + Math.random() * (timeEnd - timeStart));
                return new Date(timeRandom);
     
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     
            return null;
        }
    }
    

    笔记:可以通过日历对象得到日期对象

    //采用单例模式获取日历对象Calendar.getInstance();
    Calendar c = Calendar.getInstance();

        //通过日历对象得到日期对象
        Date d = c.getTime();
    

    日期对象
    add方法,在原日期上增加年/月/日
    set方法,直接设置年/月/日

    题目3--Calendar

    找出下个月的倒数第3天是哪天

    package date;
       
    import java.text.SimpleDateFormat;
    //
    import java.util.Calendar;
    import java.util.Date;
       
    public class TestDate {
       
        private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       
        public static void main(String[] args) {
            Calendar c = Calendar.getInstance();
              
            System.out.println("今天是:" + format( c.getTime()));
            //先翻到下下个月
            c.add(Calendar.MONTH,2);
            //设置到月初
            c.set(Calendar.DATE,1);
            //再往回翻3天
            c.add(Calendar.DATE,-3);
             Exception e;
            System.out.println("下个月倒数第三天是:" + format(c.getTime()));
              
        }
       
        private static String format(Date time) {
            return sdf.format(time);
        }
    }
    
  • 相关阅读:
    Resharper Visual studio中的插件
    MVC 中Simditor上传本地图片
    MVC编程模型
    数据库面试题
    SQL、索引
    存储过程详解
    EF的简单认识
    MVC是什么
    AOP面向切面编程
    SQL语句基本
  • 原文地址:https://www.cnblogs.com/czy16/p/8963488.html
Copyright © 2020-2023  润新知