时间 日期 Date Calendar 时间字符串转换 SimpleDateFormat

1.Date

/**
 * java.util.Date
 * Date的每一个实例用于表示一个确切的时间(精度为毫秒)
 * 内部维护一个long值,该值表示的自1970年1月1日00:00:00到当前Date表示的时间之间所经过的毫秒。
 * Date存在时区等设计缺陷,因此大部分方法都被声明为过时的再以后的开发中不应当再使用。
 */
public class DateDemo {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);
        /*
         * long getTime()
         * 获取Date内部维护的毫秒值
         */
        long time = date.getTime();
        System.out.println(time);    
        date.setTime(0);
        System.out.println(date);
    }
}

2.SimpleDateFormat

/**
 * java.text.SimpleDateFormat
 * 该类可以将Date与String之间按照指定的格式进行相互转换。
 */
public class SimpleDateFormatDemo1 {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println(now);    
        /*
         * 2019-08-21 10:35:22
         * yyyy-MM-dd HH:mm:ss
         */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E a");
        /*
         * String format(Date date)
         * 将给定的Date对象按照当前SDF指定的日期格式转换为字符串
         */
        String line = sdf.format(now);
        System.out.println(line);
    }
}
/**
 * 将一个字符串解析为Date对象
 */
public class SimpleDateFormatDemo2 {
    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);        
    }
}
/**
 * 程序启动后,要求用户输入自己的生日,格式为:yyyy-MM-dd
 * 然后经过程序计算,输出到今天为止一共活了多少
 * 天。然后再输出其出生10000天的纪念日是哪天,输出的格式同上。
 */
public class Test {
    public static void main(String[] args) throws Exception {
        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+"天,请继续保持!");        
        time = birth.getTime()+1000*60*60*24*10000L;                
        Date date = new Date(time);        
        String line = sdf.format(date);
        System.out.println("您出生10000天的纪念日为:"+
        line);            
    }
}

3.Calendar

/**
 * java.util.Calendar  日历类
 * Calendar是一个抽象类,规定了日历类操作时间的一系列方法。
 * 可以使用其提供的静态方法:getInstance来获取一个当前系统所在地区适用的实现类,大部分地区获取回来
 * 的是GregorianCalendar,即:阳历实现类
 */
public class CalendarDemo1 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);        
        /*
         * Calendar提供的方法:
         * Date getTime()
         * 可以将当前Calendar表示的日期以一个Date实例形式返回。
         */
        Date date = calendar.getTime();
        System.out.println(date);    
        /*
         * void setTime(Date date)
         * 调整当前Calendar使其表示给定的Date所表示的日期
         */
        calendar.setTime(date);        
    }
}
/**
 * int get(int field)
 * 获取当前Calendar表示的日期中指定时间分量所对应的值。
 * 不同的时间分量用不同的整数表示,无需记忆,Calendar提供了大量的常量与之对应
 */
public class CalendarDemo2 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();        
        int year = calendar.get(Calendar.YEAR);
        /*
         * 月需要注意从0开始,即:0表示1月,1表示2月...
         */
        int month = calendar.get(Calendar.MONTH)+1;
        /*
         * 和"天"相关的时间分量有:
         * DAY_OF_MONTH:月中的天
         * DAY_OF_WEEK:周中的天
         * DAY_OF_YEAR:年中的天
         * DATE:月中的天,与DAY_OF_MONTH一致
         */
        int day = calendar.get(Calendar.DATE);
        System.out.println(year+"-"+month+"-"+day);        
        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);    
        int days = calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println("今天是今年的第"+days+"天");
        /*
         * 按照美国的习惯,一周的第一天是周日 
         */
        days = calendar.get(Calendar.DAY_OF_WEEK)-1;
        String[] data = {"日","一","二","三","四","五","六"};
        System.out.println("今天是周"+data[days]);    
        //获取指定时间分量所允许的最大值
        int d = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
        System.out.println("今年共"+d+"天");    
    }
}
/**
 * void set(int field,int value)
 * 调整当前Calendar指定时间分量为给定的值
 */
public class CalendarDemo3 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime());    
        //2008-08-08 20:08:08
        //调整年为2008
        calendar.set(Calendar.YEAR,2008);
        //调整为8月
        calendar.set(Calendar.MONTH, Calendar.AUGUST);
        //调整为8号
        calendar.set(Calendar.DATE, 8);
        calendar.set(Calendar.HOUR_OF_DAY, 20);
        calendar.set(Calendar.MINUTE, 8);
        calendar.set(Calendar.SECOND, 8);
        System.out.println(calendar.getTime());    
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        System.out.println(calendar.getTime());
    }
}
/**
 * void add(int field,int amount)
 * 对指定的时间分量加上给定的值,若给定的值为负数则是减去。
 */
public class CalendarDemo4 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime());
        /*
         * 查看3年2个月零25天以后那周的周三是哪天?
         */
        //加3年
        calendar.add(Calendar.YEAR, 3);
        System.out.println(calendar.getTime());        
        //加2个月
        calendar.add(Calendar.MONTH, 2);
        System.out.println(calendar.getTime());    
        //加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());
    }
}
/**
 * 计算商品促销日期
 * 程序启动后,要求用户输入商品生产日期:yyyy-MM-dd
 * 再输入商品的保质期天数,为一个整数。
 * 然后经过程序计算,输出该商品促销日期,格式同上。
 * 规则:
 * 商品过期日前两周的周三为促销日期。
 */
public class Test2 {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入生产日期:");
        String str = scanner.nextLine();
        System.out.println("请输入保质期的天数:");
        int days = Integer.parseInt(scanner.nextLine());    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(str);    
        //使Calendar表示生产日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);        
        //计算过期日
        calendar.add(Calendar.DAY_OF_YEAR, days);
        //调整为前两周的周三
        calendar.add(Calendar.DAY_OF_YEAR, -14);
        calendar.set(Calendar.DAY_OF_WEEK, 4);        
        date = calendar.getTime();
        str = sdf.format(date);
        System.out.println("促销日期为:"+str);
    }
}

猜你喜欢

转载自www.cnblogs.com/hello4world/p/12159219.html