MyJavaSource(1):LocalDateTime

       1.获取最大的、最小的LocalDateTIme(用处不大)
	   LocalDateTime minDate=LocalDateTime.MIN;
	
	   LocalDateTime maxDate=LocalDateTime.MAX;
   
        2.获得当前时间的三种方法。 可以选择时区或者不选择时区
         第一种使用默认的时区 Clock.systemDefaultZone()
     

		  2.1 public static LocalDateTime now()
          第二种可以通过ZoneId.of(ZoneId.SHORT_IDS.get("ACT"))的方式来选择时区
          2.2public static LocalDateTime now(ZoneId zone)
          第三种通过Clock的静态方法systemUTC等获取对应时区 
          或者使用方法自定义获取   		 
          public static Clock system(ZoneId zone)。
          2.3 public static LocalDateTime now(Clock clock)
          
总结:自定义时区或者使用默认时区来获取到当前时间

		LocalDateTime localDateTime1=LocalDateTime.now();
		LocalDateTime localDateTime2=LocalDateTime.now(Clock.systemUTC());
		localDateTime3=LocalDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("ACT")));
    3.通过指定年月日 时分秒 纳秒 获取指定的时间,可以通过注解contact的方式创建
     3.1 public static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute)
 LocalDateTime localDateTime1=LocalDateTime.of(2011,12,21,14,45);
      3.2 public static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second)
      3.3 public static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
      通过LocalDate,LocalTime来获取
      3.4 public static LocalDateTime of(LocalDate date, LocalTime time)
  


      将Instant(它表示的是一个时间点。范围值是从0-999,999,999。用于记录应用程序内事件的时间戳)生成时间
      3.5 public static LocalDateTime ofInstant(Instant instant, ZoneId zone)
      从the epoch of 1970-01-01T00:00:00Z 开始 累加时间 。
       epochSecond 秒
       nanoOfSecond 纳秒
       offset 根据时区来的偏移量
      3.6 public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset) {

        LocalDateTime localDateTime1=LocalDateTime.ofInstant(Instant.now(), ZoneId.of(ZoneId.SHORT_IDS.get("PLT")));
        System.out.println("localDateTime:"+localDateTime);
        
        
        LocalDateTime localDateTime2=LocalDateTime.ofEpochSecond(1521000100,12, ZoneOffset.UTC);
        System.out.println("localDateTime:"+localDateTime);
        
        /*
        public static LocalDateTime from(TemporalAccessor temporal) 值可以是LocalDateTime类型的,也可以是其他TemporalAccessor子类
        也许是ZonedDateTime,OffsetDateTime等。
*/
        LocalDateTime localDateTime3=LocalDateTime.from(LocalDateTime.now());
         
        
    将文本转成LocalDateTime类型。参数CharSequence是字符序列,可以使用String
    DateTimeFormatter是LocalDateTime的格式。
    通过DateTimeFormatter.ofPattern来设置时间格式。
    注意这个方法,它的格式被默认为yyyy-MM-ddTHH:ss:mm
    public static LocalDateTime parse(CharSequence text)
    public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)                  
char[] chars={'2','0','1','2','-','0','2','-','1','3','T','1','1',':','1','2',':','4','5'};
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm"));
//最后还是转成了String
System.out.println(LocalDateTime.parse(new String(chars)));
 
    4.指定LocalDate,LocalTime创建时间
    private LocalDateTime with(LocalDate newDate, LocalTime newTime)
    
    
    5.是否包括时态字段或者时态单位
    5.1 public boolean isSupported(TemporalField field)  可以来自ChronoField类
    5.2 public boolean isSupported(TemporalUnit unit)    其中字段来自ChronoUnit类
  
    LocalDateTime now = LocalDateTime.now();
boolean flag=false;
flag=now.isSupported(ChronoField.INSTANT_SECONDS);
flag=now.isSupported(ChronoUnit.DAYS);
    6.获取一段时间的时间范围
    public ValueRange range(TemporalField field)
final ValueRange range = now.range(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR);
System.out.println("range:"+range.getLargestMinimum());
    7.获取当前时间 对应的字段的具体数值
      7.1public long getLong(TemporalField field)
      7.2public long get(TemporalField field)
  System.out.println(now.getLong(ChronoField.DAY_OF_WEEK));
    还要一系列get,他们可以获取与LocalDate,LocalTime相关的字段值
      7.3public int getYear()
      7.4public int getMonthValue()
      7.5public int getDayOfMonth()

     
    
    8.更改时间
      更改date,time或者都更改
      8.1 public LocalDateTime with(TemporalAdjuster adjuster)
    通过TemporalField确定更改的字段,来进行更改
      8.2 public LocalDateTime with(TemporalField field, long newValue) {
System.out.println(now.with(LocalDate.now()).minusDays(20));
更改对应时间
      8.3 public LocalDateTime withYear(int year)
      8.4 public LocalDateTime withMonth(int month)
    

    9.从指定位置截取时间
    public LocalDateTime truncatedTo(TemporalUnit unit)
 LocalDateTime localDateTime=now.truncatedTo(ChronoUnit.DAYS);
    System.out.println(localDateTime);
    10.plus,增加时间
       10.1 public LocalDateTime plusSeconds(long seconds)
       10.2 public LocalDateTime plusMinutes(long minutes)
       10.3 public LocalDateTime plusHours(long hours)

    /*根据时间偏移量返回一个OffsetDateTime
   11. 参数ZoneOffset.ofTotalSeconds(100)是一个偏移时间
        public OffsetDateTime atOffset(ZoneOffset offset)*/
  System.out.println(now.atOffset(ZoneOffset.ofTotalSeconds(100)));
   12. 结合time-zone与DateTime生成ZonedDateTime
        public ZonedDateTime atZone(ZoneId zone)
System.out.println(now.atZone(ZoneId.of("America/New_York")));
    13.一般使用的是compareTo,比较时间的大小。大于返回正,小于返回负,等于返回0。
    参数不一定为LocalDateTime,也可能为ChronoLocalDateTime的其他子类
         13.1 public int compareTo(ChronoLocalDateTime<?> other)
         13.2 private int compareTo0(LocalDateTime other)
    类似的方法还有
         13.3 public boolean isAfter(ChronoLocalDateTime<?> other)
         13.4 public boolean isBefore(ChronoLocalDateTime<?> other)
         13.5 public boolean isEqual(ChronoLocalDateTime<?> other)
         13.6 public boolean equals(Object obj)
LocalDateTime now=LocalDateTime.now();
   LocalDateTime before=LocalDateTime.now().minusDays(32);
    System.out.println(now.compareTo(before));
   14. 用具体的方法来查询时间
    public <R> R query(TemporalQuery<R> query)
   System.out.println(now.query(TemporalQueries.localDate()));
}

}

总结:最常用的功能可能就是now(),minus()系列,plus()系列,isBefore()等比较系列。其他的功能要用的时候,再去看也没问题的。毕竟只是一个时间类。
剩下的功能有:设置当前的date或者time、时区、时间偏移量、查询时间段的起始位置、截取时间、查询具体的时间…

第一次仔细的看源码,还是学到了很多东西。
1.查看方法如何使用。可以点方法,查看其他调用的情况是怎么样的。
2.不知道传入的参数是什么类。关联的类,有很多类有继承和实现这样的关系。方法的参数上面是接口名称,可以使用其子类来进行传参。
看LocalTimeDate的继承、实现情况

public final class LocalDateTime
        implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable

从这里可以发现,LocalDateTime实现了Temporal、TemporalAdjuster、ChronoLocalDateTime,Serializable。所以遇到参数为以上Temporal、TemporalAdjuster、ChronoLocalDateTime的情况下,可以传入LocalDateTime来试试。

3.根据其源码来判断

  public static LocalDateTime from(TemporalAccessor temporal)
  比如这个方法的参数,根据源码类的详细情况:
  public static LocalDateTime from(TemporalAccessor temporal) {
        if (temporal instanceof LocalDateTime) {
            return (LocalDateTime) temporal;
        } else if (temporal instanceof ZonedDateTime) {
            return ((ZonedDateTime) temporal).toLocalDateTime();
        } else if (temporal instanceof OffsetDateTime) {
            return ((OffsetDateTime) temporal).toLocalDateTime();
        }
        try {
            LocalDate date = LocalDate.from(temporal);
            LocalTime time = LocalTime.from(temporal);
            return new LocalDateTime(date, time);
        } catch (DateTimeException ex) {
            throw new DateTimeException("Unable to obtain LocalDateTime from TemporalAccessor: " +
                    temporal + " of type " + temporal.getClass().getName(), ex);
        }
    }

它判断了传入的参数是否为LocalDateTime、ZonedDateTime、OffsetDateTime。那么传入的参数就可以是这三个类对象
4.使用public static T requireNonNull(T obj, String message)来判断一个元素是否为空
5.方法之中存在很多互相调用,一般是为了创造相同类型的其他方法,以方便使用者调用。比如:

  public static LocalDateTime now() {
        return now(Clock.systemDefaultZone());
    }
public static LocalDateTime now(ZoneId zone) {
        return now(Clock.system(zone));
    }
public static LocalDateTime now(Clock clock) {
        Objects.requireNonNull(clock, "clock");
        final Instant now = clock.instant();  // called once
        ZoneOffset offset = clock.getZone().getRules().getOffset(now);
        return ofEpochSecond(now.getEpochSecond(), now.getNano(), offset);
    }

三个now方法,最终都是调用的public static LocalDateTime now(Clock clock)。

  6.LocalDateTime是一个复合类(我编的),它里面有很多方法都是调用的LocalDate与LocalTime。看到LocalDateTime的源码,还要再深入进去查看LocalDate的功能...属实是难受,所有要查看就查看基础类,这样类之间互相调用的情况要少很多。

开始看了几个感觉还不错,但是越到后面,越感觉没有必要。因为这些东西是可以通过java API文档来查看的。像这样的时间类,了解就行了,没有必要花太多时间的。看就看重要的类,比如说一些容器的数据结构,一些方法的执行逻辑。

最后的最后,欢迎大家与我一起讨论。有什么写的不对的地方,也欢迎大家指正

感恩~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值