• 13_日期时间、Math、枚举


    日期时间、Math、枚举
    日期时间
    计算机如何表示时间?
    GMT时间指格林尼治所在地的标准时间,也称为时间协调时(UTC),其他地区的时间都是相对于GMT时间的偏移。
     
    北京位于东八区 = UTC + 8
     
    时间戳(timestamp):距离特定时间经过的毫秒数,这个特定的时间计算机规定了是1970年01月01日 00:00:00:000,这个特定时间成为历元。
     
    计算机时间2018.12.22 11:41:23:000 就是2018.12.22 11:41:23:000距离历元经历的毫秒数,用long类型存储。
     
    Date
    java中表示日期时间的类,位于java.util包中。
     
    public static void main(String[] args) {
    // 根据当前系统当前时区构造一个Date对象表示当前时间。
    Date date = new Date();
    // Tue Apr 02 14:25:06 CST(China Standard Time) 2019
    System.out.println(date);
     
     
    Date date2 = new Date(1000);
    // Thu Jan 01 08:00:00 CST 1970
    System.out.println(date2);
     
     
    // 需求:创建一个时间表示1天之后的现在
    long ts1 = 24 * 60 * 60 * 1000;
    Date now = new Date();
    long ts2 = now.getTime() + ts1;
    Date date3 = new Date(ts2);
    System.out.println(date3);
    }
    Date 本质上是一个包装类,内部封装了一个long 类型的timestamp,表示距离历元所经历 的毫秒数。可以通过getTime() 其内部存储的时间戳。
     
    时间的比较
    public static void main(String[] args) {
     
    Date date1 = new Date();
     
    long ts1 = 24 * 60 * 60 * 1000;
    Date date2 = new Date(date1.getTime() + ts1);
     
    // before/after
    System.out.println(date1.before(date2));
    System.out.println(date1.after(date2));
     
    // Comparable接口
    System.out.println(date1.compareTo(date2));
     
    // equals
    System.out.println(date1.equals(date2));
    }
     
    日期时间格式化
    [1] Date -> 字符串
    public static void main(String[] args) {
     
    Date now = new Date();
    // System.out.println(now.toString());
     
    // 格式化成友好的时间
    // 按照默认的模式和默认的语言环境创建格式化对象
    SimpleDateFormat df = new SimpleDateFormat();
    // 19-4-2 下午2:51
    String nowStr = df.format(now);
    System.out.println(nowStr);
     
    // 需求:按照 年-月-日 时:分:秒 格式格式化时间
    /*
    SimpleDateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    String nowStr2 = df2.format(now);
    System.out.println(nowStr2);
    */
     
    // applyPattern
    SimpleDateFormat df3 = new SimpleDateFormat();
    df3.applyPattern("yyyy年MM月dd日");
    String nowStr3 = df3.format(now);
    System.out.println(nowStr3);
     
    df3.applyPattern("HH:mm:ss");
    String nowStr4 = df3.format(now);
    System.out.println(nowStr4);
    }
     
    [2] 字符串 -> Date
    public class Test04 {
    public static void main(String[] args) {
     
    String str1 = "2019年04月02日 15:34:12";
     
    SimpleDateFormat df = new SimpleDateFormat();
    df.applyPattern("yyyy年MM月dd日 HH:mm:ss");
     
    Date date = null;
    try {
    date = df.parse(str1);
    } catch (ParseException e) {
    e.printStackTrace();
    }
     
    System.out.println(date);
    }
    }
     
    注意:parse方法会产生ParseExcepion 检查时异常。
     
     
    日历Calendar
    日历本质上封装了一个long类型的time,表示距离历元的毫秒数。
    Calendar内部提供了很多方法用于计算这个时间戳表示的一些信息。这些信息用字段(YEAR、MONTH)标记,可以通过get()方法获取,计算好的字段信息放到数组中,通过字段(索引)到数组中取值而已。
     
    通常通过getInstance()工厂方法获取日历对象。
     
    获取日历中的基本信息
    public static void main(String[] args) {
    // 更加当前语言环境、当前时区创建一个日历对象
    Calendar cal = Calendar.getInstance();
    System.out.println(cal);
     
    // 获取日历中的年(YEAR)
    int year = cal.get(Calendar.YEAR);
    // 获取月份(0-11),月份从0开始
    int month = cal.get(Calendar.MONTH);
    // 获取一个月中的第几天,从1开始
    int day = cal.get(Calendar.DAY_OF_MONTH);
     
    // 获取一天的第几个小时(0-23)
    int hour = cal.get(Calendar.HOUR_OF_DAY);
    int min = cal.get(Calendar.MINUTE);
    int second = cal.get(Calendar.SECOND);
    int millSecond = cal.get(Calendar.MILLISECOND);
     
    // 获取星期,从周日开始
    int week = cal.get(Calendar.DAY_OF_WEEK);
    System.out.println(week);
     
    // 获取一个月有多少天?
    int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    int minDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
     
    }
     
    需求:控制台输入本月日历
    package cn.sxt03.calender;
    import java.util.Calendar;
    public class Test03 {
    public static void main(String[] args) {
     
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MONTH, 5);
    // 记录今天的日期
    int today = cal.get(Calendar.DATE);
     
    // 修改日历到本月1号
    cal.set(Calendar.DATE, 1);
    // 本月1号是星期几
    int weekOfFirstDay = cal.get(Calendar.DAY_OF_WEEK);
    System.out.println(weekOfFirstDay);
     
    int oneDayInMonth = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
    int lastDayInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
     
    // 修改日历到本月今天
    cal.set(Calendar.DATE, today);
     
    System.out.println("日 一 二 三 四 五 六");
    // 输出本月1号前的空格
    for(int i=1;i<weekOfFirstDay;i++) {
    System.out.print(" ");
    }
    // 排列1-最大天数
    for(int i=oneDayInMonth;i<=lastDayInMonth;i++) {
    // 修改日历到指定的天
    cal.set(Calendar.DATE, i);
     
    if(i == today) {
    System.out.print(i+"* ");
    }else {
    System.out.print(i+" ");
    }
     
    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
    System.out.println();
    }
     
    }
     
    }
    }
     
    Math类
    Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
    public static void main(String[] args) {
    // 属性
    System.out.println(Math.PI);
     
    // 【1】求绝对值
    System.out.println(Math.abs(-1));
     
    // 【2】ceil/floor
    // ceil(x) 返回比x大的最小整数 => 向上取整
    double a = 10.1;
    System.out.println(Math.ceil(a));
    // floor(x) 返回比x小的最大整数 => 向下取整
    System.out.println(Math.floor(a));
     
    // 【3】求两个数的最大值、最小值
    System.out.println(Math.max(10, 20));
    System.out.println(Math.min(10, 20));
     
    // 【4】pow(x,y) 求x的y次幂
    System.out.println(Math.pow(2, 3));
     
    // 【5】random()
     
    // 【6】round 四舍五入
    System.out.println(Math.round(10.5));
     
    // sqrt() 开方
    System.out.println(Math.sqrt(4));
     
    // 【7】角度->弧度
    System.out.println(Math.toRadians(180));
    // 弧度->角度
    System.out.println(Math.toDegrees(Math.PI/3));
     
    // 【8】sin/cos/tan(c) 参数是弧度
    System.out.println(Math.sin(Math.PI/6));
     
    // 需求:求两点之间的距离(x1,y1)-(x2,y2)
    // Math.sqrt(Math.pow((x1-x2), 2)+Math.pow((y1-y2), 2))
    }
     
    枚举
    枚举概念
    枚举(enum)是一组固定常量的组成的类型,它是一种自定义数据类型。
    [修饰符] enum 枚举名称{
    常量1,
    常量2,
     
    常量n[;]
    }
    注意:
    [1]枚举中的常量是有限的。
    [2] 枚举值不需要任何修饰符,默认static final 类型
     
    需求:声明一个性别的枚举
    public enum Gender{
    男,
    女,
    保密
    }
    声明了一个枚举,它是一种数据类型,可以声明变量。
     
    public class Test01 {
    public static void main(String[] args) {
     
    // 声明了一个Gender类型的变量
    Gender gender = Gender.;
    System.out.println(gender);
    }
    }
     
    总结:
    [1]枚举类型是除基本数据类型、引用数类型外的另外一种自定义数据类型。一般可以把有限的、可列举的常量值定义成枚举类型。
    [2] 通过Gender枚举声明的变量取值一定是Gender中声明的枚举值,不能取其他值。
     
     
    enum 本质(C)
    enum 本质上是继承于Enum类。enum实际上也是类。
    public enum Gender{
    // 枚举值本质上是Gender类型的一个实例
    ,
    ,
    保密;
     
    private Gender() {
    System.out.println("gender");
    }
     
    public void showInfo() {
    System.out.println("showinfo");
    }
    }
     
    枚举和String的转换
    public class Test02 {
    public static void main(String[] args) {
     
    // 【1】枚举值->String
    Gender gender = Gender.;
    System.out.println(gender.toString());
     
    // 【2】String->枚举值
    String str = "女";
    // 可能会IllegalArgumentException
    Gender gender2 = Enum.valueOf(Gender.class, str);
    System.out.println(gender2);
    }
    }
     
    其他方法
    public class Test03 {
    public static void main(String[] args) {
     
    // name() 获取枚举值的名称
    // equals() 比较两个枚举值是否相等
     
    Gender gender = Gender.保;
    System.out.println(gender.ordinal());
     
    }
    }
     
    枚举和switch
    public static void main(String[] args) {
     
    Action action = Action.DEL;
     
    switch (action) {
    case ADD:{
    System.out.println("add");
    break;
    }
    case VIEW:{
    System.out.println("view");
    break;
    }
    case DEL:{
    System.out.println("del");
    break;
    }
    case EXIT:{
    System.out.println("exit");
    break;
    }
    }
    }
     
     
    File 类
    java中文件或者目录都可以通过File类来表示。
     
    public static void main(String[] args) {
    // 路径分隔符。
    /**
    * win=>;
    * mac|linux|unix=>:
    */
    System.out.println(File.pathSeparator);
    // 路径名称分隔符
    /**
    * win=>
    * mac|linux|unix => /
    */
    System.out.println(File.separator);
    }
     
  • 相关阅读:
    [java初探06]__排序算法的简单认识
    [java初探05]__数组的简单认识及Arrays类的常用方法
    [java工具类01]__构建格式化输出日期和时间的工具类
    [Java初探04]__字符串(String类)相关
    [Java初探实例篇02]__流程控制语句知识相关的实例练习
    【Java初探03】——流程控制语句
    iOS ipv6 被拒
    iOS工程中如何去掉第三方的警告
    iOS面试准备之思维导图(转)
    UML图基本类型
  • 原文地址:https://www.cnblogs.com/aknife/p/10984911.html
Copyright © 2020-2023  润新知