• 20145124 陈威名 关于同学们第七周博客后的问题汇总和小结


    首先回顾一下第七周主要学习内容:
    六个时间基准:
    1.格林威治标准时间
    2.世界时
    3.国际原子时
    4.世界协调时间
    5.Unix时间
    6.epoch

    年历:
    7.Julian Calendar四年一闰
    8.Gergorian Calendar 格里高利历
    9.ISO 8601标准

    Date

    使用Date实例的各getTime可以获得epoch毫秒数,**Data实例只用来当做时间轴上的某一瞬间;利用DataFormat可以对字符串格式进行处理,分别有GetDateInstance、GetTimeInstance、GetDateTimeInstance

    DateFormat

    java.text.DateFormat复责字符串时间格式处理,DataFormat是个抽象类,其操作类为java.text.SimpleDataFormat,getDataInstance()、getTimeInstance()、getDataTimeInstance()等静态用法;可以直接构建SimpleDataFormat实例,或是使用DataFormat的;直接构建SimpleDateFormat,可以自定义字符串格式 parse方法可以将指定的字符串剖析Date实例

    Calendar

    Calendar实例取得某个时间日期信息,或者对时间日期进行操作;Calendar是个抽象类,java.util.GregorianCalendar是其子类,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例;比较两个Calendar的时间日期先后,使用after()或before()方法;取得Calendar实例后,可以取得年月日信息,可以进行设定,可以进行运算来改变。

    TimeZone

    TimeZone的getdefault可以取得默认时区的信息;Calender在调用getInstance()时可以指定Timezone,如果已经取得Calender实例,可以通过setTimeZone()的方法设定时区。

    •TemporalAmount 时间计量,新时间和日期用API用类Duration来定义,对于年、月、日、星期的日期差,可使用Period类定义,静态方法ofDays()、ofMonths()、ofWeeks(),返回Period实例。

    •TemporalUnit plus()方法的另一重载版本,接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnit是其实做类,使用enum实做。

    •Temporal plus()定义在Temporal接口上;Instant、LocalDate、LocalDateTime、LocatTime、OffsetTime、ZonedDateTime等类,都操作了 Temporal 接口。

    •TemporalAccessor Temporal是 TemporalAccessor的子接口。

    问题: 如何计算一个程序的运行时间?
    解决
    (1)以毫秒为单位计算:
    long startTime=System.currentTimeMillis(); //获取开始时间
     doSomeThing(); //测试的代码段
     long endTime=System.currentTimeMillis(); //获取结束时间
     System.out.println("程序运行时间: "+(end-start)+"ms");
    (2)以纳秒为单位计算:
    long startTime=System.nanoTime(); //获取开始时间
      doSomeThing(); //测试的代码段
      long endTime=System.nanoTime(); //获取结束时间
      System.out.println("程序运行时间: "+(end-start)+"ns");

    书上435页的代码为什么要调用clone()?

    生日输入的时候一定要遵循标准的格式,10以内的数字输入时一定要加0,例如"09"。

    有的同学对显示时间日期的几种表示疑惑。现在总结一下几种不同的表达方式:
    import java.util.;
    import java.text.
    ;

    public class Testdate2 {
    public static void main(String[] args) {

        Date now = new Date();
        Calendar cal = Calendar.getInstance();
    
        DateFormat d1 = DateFormat.getDateInstance(); // 默认语言(汉语)下的默认风格(MEDIUM风格,比如:2013-6-10 13:14:41)  
        String str1 = d1.format(now);
        DateFormat d2 = DateFormat.getDateTimeInstance();
        String str2 = d2.format(now);
        DateFormat d3 = DateFormat.getTimeInstance();
        String str3 = d3.format(now);
        DateFormat d4 = DateFormat.getInstance(); // 使用SHORT风格显示日期和时间  
        String str4 = d4.format(now);
        DateFormat d5 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); // 显示日期,周,时间(精确到秒)  
        String str5 = d5.format(now);
        DateFormat d6 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); // 显示日期。时间(精确到秒)  
        String str6 = d6.format(now);
        DateFormat d7 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); // 显示日期,时间(精确到分)  
        String str7 = d7.format(now);
        DateFormat d8 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); // 显示日期,时间(精确到分)  
        String str8 = d8.format(now);// 与SHORT风格相比,这种方式最好用  
    
        System.out.println("用Date方式显示时间: " + now);// 此方法显示的结果和Calendar.getInstance().getTime()一样  
        System.out.println("用DateFormat.getDateInstance()格式化时间后为:" + str1);
        System.out.println("用DateFormat.getDateTimeInstance()格式化时间后为:" + str2);
        System.out.println("用DateFormat.getTimeInstance()格式化时间后为:" + str3);
        System.out.println("用DateFormat.getInstance()格式化时间后为:" + str4);
        System.out.println("用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为:" + str5);
        System.out.println("用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为:" + str6);
        System.out.println("用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后为:" + str7);
        System.out.println("用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间后为:" + str8);
    }
    

    }

    书上HowOld.java运行结果如下:

    但是事实上一年的毫秒数并不是如上面例子中那么简单计算的,算出来的岁数也是错误的。修改后的代码如下:
    import java.time.*;
    import java.util.Scanner;
    import static java.lang.System.out;

    public class HowOld2 {
    public static void main(String[] args) {
    out.print("輸入出生年月日(yyyy-mm-dd):");
    LocalDate birth = LocalDate.parse(new Scanner(System.in).nextLine());
    LocalDate now = LocalDate.now();
    Period period = Period.between(birth, now);
    out.printf("你活了 %d 年 %d 月 %d 日%n",
    period.getYears(), period.getMonths(), period.getDays());
    }

    上面实例可以告诉我们Date实例只能用来当作时间轴上的某一个瞬间,需要进行转换,并且一年的时间并不是3652460601000,这里面还是有许多的不一样。机器时间和人类时间还是有不同,设计程序时要正确地使用,在人类时间观点上还要注意各种历法的不同以及时区的问题,要不然还是会有些不准确(时间本来就挺复杂的)。

    为了准确显示经过的毫米数和系统显示时间:

    • public class DateTest {
    • public static void main(String args[]) {
    • DateTest nowDate = new DateTest();
    • nowDate.getSystemCurrentTime();
    • nowDate.getCurrentDate();
    • }

    • public void getSystemCurrentTime() {
    • System.out.println("----获取系统当前时间----");
    • System.out.println("系统当前时间 = " + System.currentTimeMillis());
    • }

    • public void getCurrentDate() {
    • System.out.println("----获取系统当前日期----");
    • //创建并初始化一个日期(初始值为当前日期)
    • Date date = new Date();
    • System.out.println("现在的日期是 = " + date.toString());
    • System.out.println("自1970年1月1日0时0分0秒开始至今所经历的毫秒数 = " + date.getTime());
    • }
    }

  • 相关阅读:
    swift 中 Self 与self
    Swift 中的泛型
    mac 报文件已损坏 怎么办
    winxp秘钥
    字符串拷贝函数strcpy, strcat, sprintf, strncpy, strncat和snprintf的区别
    【原创】Linux应用程序完整调用自己写的字符设备驱动过程
    idea中新建git分支,并提交到远程github
    (JS-PHP)使用RSA算法进行加密通讯
    Linux日志相关的命令
    hibernate中关于is null的查询
  • 原文地址:https://www.cnblogs.com/20145124cwm/p/5483693.html
Copyright © 2020-2023  润新知