精华内容
参与话题
问答
  • LocalDate

    2019-06-02 17:54:17
    Java 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了。 java.util.Date月份从0开始,一月是0,十二月是11,变态吧!java.time.LocalDate月份和...

    Java 8新增了LocalDateLocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了。

    java.util.Date月份从0开始,一月是0,十二月是11,变态吧!java.time.LocalDate月份和星期都改成了enum,就不可能再用错了。

    java.util.DateSimpleDateFormatter都不是线程安全的,而LocalDateLocalTime和最基本的String一样,是不变类型,不但线程安全,而且不能修改。

    java.util.Date是一个“万能接口”,它包含日期、时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪些部分的数据是有用的,哪些部分的数据是不能用的。在新的Java 8中,日期和时间被明确划分为LocalDateLocalTimeLocalDate无法包含时间,LocalTime无法包含日期。当然,LocalDateTime才能同时包含日期和时间。

    新接口更好用的原因是考虑到了日期时间的操作,经常发生往前推或往后推几天的情况。用java.util.Date配合Calendar要写好多代码,而且一般的开发人员还不一定能写对。

    LocalDate

    看看新的LocalDate怎么用:

     

    import java.time.DayOfWeek;
    import java.time.LocalDate;
    import java.time.temporal.ChronoUnit;
    import java.time.temporal.TemporalAdjusters;
    
    public class LocalDateTest {
    
        /**
         * 
         * @param args
         */
        public static void main(String[] args) {
    
           //当前日期
            LocalDate localDate = LocalDate.now();
            LocalDate localDate1 = LocalDate.of(2017, 11, 10);
            LocalDate localDate2 = LocalDate.of(2017, 11, 10);
    
            // 根据字符串取:
            LocalDate endOfFeb = LocalDate.parse("2014-02-28"); // 严格按照ISO yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式
            //LocalDate.parse("2014-02-29"); // 无效日期无法通过:DateTimeParseException:Invalid date
    
            //当前的年
            System.out.println(localDate.getYear());
            //当前的月份
            System.out.println(localDate.getMonth());
            //当前的月份
            System.out.println(localDate.getMonthValue());
            //当前日期是星期几
            System.out.println(localDate.getDayOfWeek());
            //当前的天数在一年中是第几天
            System.out.println(localDate.getDayOfYear());
            //当前日期是这个月的第几天
            System.out.println(localDate.getDayOfMonth());
            //每个月的天数
            System.out.println(localDate.lengthOfMonth());
            //这一年有多少天
            System.out.println(localDate.lengthOfYear());
            //是否是闰年
            System.out.println(localDate.isLeapYear());
            //当前日期减一个月
            System.out.println(localDate.minusMonths(1));
            //当前日期减一年
            System.out.println(localDate.minusYears(1));
            //当前日期减一个星期
            System.out.println(localDate.minusWeeks(1));
            System.out.println(LocalDate.MIN);
    
            System.out.println(LocalDate.MAX);
            //时间的判断判断先后
            System.out.println(localDate.isBefore(localDate.minusMonths(1)));
            System.out.println(localDate.isBefore(localDate.plusMonths(1)));
            System.out.println(localDate.isAfter(localDate1));
    
            //修改指定本地日期,获取新的对象,在原来的对象上指定时间修改
            LocalDate localdate1 = localDate.withDayOfMonth(1); //修改当前对象在当月的日期
            LocalDate localdate2 = localDate.withDayOfYear(1);
            LocalDate localdate3 = localDate.withMonth(1);
            LocalDate localdate4 = localDate.withYear(2018);
    
            System.out.println(localdate1);
            System.out.println(localdate2);
            System.out.println(localdate3);
            System.out.println(localdate4);
    
            LocalDate today = LocalDate.now();
            // 取本月第1天:
            LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth());
            // 取本月第2天:
            LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
            // 取本月最后一天,再也不用计算是28,29,30还是31:
            LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
            // 取下一天:
            LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); 
            // 取2017年1月第一个周一
            LocalDate firstMondayOf2015 = LocalDate.parse("2017-01-01").with(
            TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); 
            //比较二个时间是否相等
            System.out.println(localDate1.equals(localDate2));
            System.out.println(localDate1.equals(localdate2));
    
            //比较二个时间的大小,返回是年,月,日的天数的差值
            System.out.println(localDate1.compareTo(localDate2));
            System.out.println(localDate1.compareTo(localdate2));
    
            //二个日期相差的天数,年,月,等
            long days = localdate2.until(localdate4, ChronoUnit.DAYS);
            long hour = localdate2.until(localdate4, ChronoUnit.YEARS);
            System.out.println(days);
            System.out.println(hour);
    
            //相差天数
            LocalDate end = LocalDate.of(2018, 12, 26);
            LocalDate start = LocalDate.of(2018, 11, 25);
            System.err.println(end.toEpochDay() - start.toEpochDay());
    
        }
    
    }

    LocalTime

    LocalTime只包含时间,以前用java.util.Date怎么才能只表示时间呢?答案是,假装忽略日期。

    LocalTime包含毫秒:

    LocalTime now = LocalTime.now(); // 11:09:09.240
    

    你可能想清除毫秒数:

    LocalTime now = LocalTime.now().withNano(0)); // 11:09:09
    

    构造时间也很简单:

    LocalTime zero = LocalTime.of(0, 0, 0); // 00:00:00
    LocalTime mid = LocalTime.parse("12:00:00"); // 12:00:00
    

    时间也是按照ISO格式识别,但可以识别以下3种格式:

    • 12:00
    • 12:01:02
    • 12:01:02.345

    JDBC

    最新JDBC映射将把数据库的日期类型和Java 8的新类型关联起来:

    SQL -> Java
    --------------------------
    date -> LocalDate
    time -> LocalTime
    timestamp -> LocalDateTime
    

    再也不会出现映射到java.util.Date其中日期或时间某些部分为0的情况了。

    展开全文
  • LocalDate.of(2017,1,10) < LocalDate.of(2017,1,10) // false LocalDate.of(2017,1,10) <= LocalDate.of(2017,1,10) // true LocalDate.of(2017,1,10) > LocalDate.of(2017,1,10) // false LocalDate....
  • as the zone id for converting from Date to LocalDate and vice verse. <p>This behaviour, however, will create a dependency on the OS timezone and thus, contradicts to the concept of LocalDate (date-...
  • LocalDateTime.ofEpochSecond(millis / 1000, zoneOffset).toLocalDate() </code></pre> <p>So far I haven't found a way to get the system offset using js-joda. Is this possible?</p><p>该提问来源于...
  • txDm.loadValue(query, LocalDate.class).list(); </localdate></code></pre> <p>Params: <pre><code> q2 -> {LocalDate} "2020-01-26" q1 -> "Bob" q3 -> {LocalDate} "2020-...
  • <div><p>The default semantics of ranges between dates is to span over individual days, just like in SQL, when adding an integer interval: <pre><code> sql DATE '2016-01-01' +...
  • 主要介绍了String类型转localDate,date转localDate的实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • <p>For some reason localdate is serialized as double array <pre><code>java public class ObjectMapperTest { private ObjectMapper objectMapper; public void setUp() throws Exception { ...
  • <div><ul><li>Changes LocalDate constructor to interpret 'year' as days from epoch instead of millis from epoch.</li><li>LocalDate now keeps internal state 'value' as number ...
  • LocalDate比较

    万次阅读 2019-02-12 10:20:08
    date.isBefore(firstDay)) date.isAfter(firstDay); date.isEqual(firstDay);

    date.isBefore(firstDay))
    date.isAfter(firstDay);
    date.isEqual(firstDay);

    展开全文
  • t seem to be any good <code>LocalDate</code> and <code>LocalDateTime</code> axis types. Would this be something that's in scope for this library? <p>I'm coming across this need a lot as I ...
  • private static LocalDate toLocalDate(Long millis) { Instant instant = Instant.ofEpochMilli(millis); LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); return ...
  • LocalDate使用

    千次阅读 2019-09-09 17:16:30
    3、Date 3.1、JDK7 Date缺点 1、所有的日期类都是可变的,因此他们都不是线程安全的,这是Java日期类最大的问题之一 2、Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于...

    转载:https://my.oschina.net/mdxlcj/blog/1622718

    3、Date

    3.1、JDK7 Date缺点

    1、所有的日期类都是可变的,因此他们都不是线程安全的,这是Java日期类最大的问题之一
    
    2、Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义
    
    3、java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。对于时间、时间戳、格式化以及解析,并没有一些明确定义的类。对于格式化和解析的需求,我们有java.text.DateFormat抽象类,但通常情况下,SimpleDateFormat类被用于此类需求
    
    4、日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题

    3.2、JDK8 Date优势

    1、不变性:新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处。
    
    2、关注点分离:新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不同的类。
    
    3、清晰:在所有的类中,方法都被明确定义用以完成相同的行为。举个例子,要拿到当前实例我们可以使用now()方法,在所有的类中都定义了format()和parse()方法,而不是像以前那样专门有一个独立的类。为了更好的处理问题,所有的类都使用了工厂模式和策略模式,一旦你使用了其中某个类的方法,与其他类协同工作并不困难。
    
    4、实用操作:所有新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。
    
    5、可扩展性:新的日期/时间API是工作在ISO-8601日历系统上的,但我们也可以将其应用在非IOS的日历上。

    3.3、JDK8 Date新增字段

          Java.time包中的是类是不可变且线程安全的。新的时间及日期API位于java.time中,java8 time包下关键字段解读。

    属性 含义
    Instant  代表的是时间戳
    LocalDate  代表日期,比如2020-01-14
    LocalTime  代表时刻,比如12:59:59
    LocalDateTime  代表具体时间 2020-01-12 12:22:26
    ZonedDateTime  代表一个包含时区的完整的日期时间,偏移量是以UTC/  格林威治时间为基准的
    Period  代表时间段
    ZoneOffset  代表时区偏移量,比如:+8:00
    Clock  代表时钟,比如获取目前美国纽约的时间

    3.4、获取当前时间

    Instant instant = Instant.now(); //获取当前时间戳
    
    LocalDate localDate = LocalDate.now();  //获取当前日期
    
    LocalTime localTime = LocalTime.now();  //获取当前时刻
    
    LocalDateTime localDateTime = LocalDateTime.now();  //获取当前具体时间
    
    ZonedDateTime zonedDateTime = ZonedDateTime.now();   //获取带有时区的时间

    3.5、字符串转换

    jdk8:
    String str = "2019-01-11";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDate localDate = LocalDate.parse(str, formatter);
    
    jdk7:
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    try {
        Date date = simpleDateFormat.parse(str); 
    } catch (ParseException e){ 
        e.printStackTrace();
    }

    3.6、Date转换LocalDate

    import java.time.Instant;
    import java.time.LocalDate;
    import java.time.ZoneId;
    import java.util.Date;
    
    public class Test {
    
        public static void main(String[] args) {
            Date date = new Date();
            Instant instant = date.toInstant();
            ZoneId zoneId = ZoneId.systemDefault();
    
            // atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
            LocalDate localDate = instant.atZone(zoneId).toLocalDate();
            System.out.println("Date = " + date);
            System.out.println("LocalDate = " + localDate);
        }
    }

    3.7、LocalDate转Date

    import java.time.LocalDate;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.util.Date;
    
    public class Test {
    
        public static void main(String[] args) {
            ZoneId zoneId = ZoneId.systemDefault();
            LocalDate localDate = LocalDate.now();
            ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
    
            Date date = Date.from(zdt.toInstant());
    
            System.out.println("LocalDate = " + localDate);
            System.out.println("Date = " + date);
    
        }
    }

    3.8、时间戳转LocalDateTime

    long timestamp = System.currentTimeMillis();
    
    Instant instant = Instant.ofEpochMilli(timestamp);
    
    LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

    3.9、LocalDateTime转时间戳

    LocalDateTime dateTime = LocalDateTime.now();
    
    dateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
    
    dateTime.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();
    
    dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();

    3.10、LocalDate方法总结

    getYear()                         int        获取当前日期的年份
    getMonth()                        Month      获取当前日期的月份对象
    getMonthValue()                   int        获取当前日期是第几月
    getDayOfWeek()                    DayOfWeek  表示该对象表示的日期是星期几
    getDayOfMonth()                   int        表示该对象表示的日期是这个月第几天
    getDayOfYear()                    int        表示该对象表示的日期是今年第几天
    withYear(int year)                LocalDate  修改当前对象的年份
    withMonth(int month)              LocalDate  修改当前对象的月份
    withDayOfMonth(intdayOfMonth)     LocalDate  修改当前对象在当月的日期
    isLeapYear()                      boolean    是否是闰年
    lengthOfMonth()                   int        这个月有多少天
    lengthOfYear()                    int        该对象表示的年份有多少天(365或者366)
    plusYears(longyearsToAdd)         LocalDate  当前对象增加指定的年份数
    plusMonths(longmonthsToAdd)       LocalDate  当前对象增加指定的月份数
    plusWeeks(longweeksToAdd)         LocalDate  当前对象增加指定的周数
    plusDays(longdaysToAdd)           LocalDate  当前对象增加指定的天数
    minusYears(longyearsToSubtract)   LocalDate  当前对象减去指定的年数
    minusMonths(longmonthsToSubtract) LocalDate  当前对象减去注定的月数
    minusWeeks(longweeksToSubtract)   LocalDate  当前对象减去指定的周数
    minusDays(longdaysToSubtract)     LocalDate  当前对象减去指定的天数
    compareTo(ChronoLocalDateother)   int        比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚,
    isBefore(ChronoLocalDateother)    boolean    比较当前对象日期是否在other对象日期之前
    isAfter(ChronoLocalDateother)     boolean    比较当前对象日期是否在other对象日期之后
    isEqual(ChronoLocalDateother)     boolean    比较两个日期对象是否相等
    展开全文
  • <div><p>Using dozer and Java 1.8 in combination with the new Date-API causes a problem in case of LocalDate (oder LocalDateTime) properties. There are no out-of-the-box converters for these new ...
  • One thing though: if I have a pojo with <code>java.time.LocalDate, it seems that it cannot be mapped since reading such pojo from a database will result in <pre><code> at sun.reflect....
  • <ul><li>There is substantial overhead creating GregorianCalendars and converting them to the LocalDate, LocalDateTime, LocalTime classes</li><li>Calling Calendar.getInstance(TimeZone.getTimeZone("...
  • String类型转localDate,date转localDate

    万次阅读 2017-12-28 15:31:11
    LocalDate beginDateTime = LocalDate.parse(beginDate, DateTimeFormatter.ofPattern(“yyyy-MM-dd”));

    String 类型转localDate
    LocalDate beginDateTime = LocalDate.parse(beginDate, DateTimeFormatter.ofPattern(“yyyy-MM-dd”));

    date类型转localDate
    Date dates = new SimpleDateFormat(“yyyyMM”).parse(cycle);
    Instant instant = dates.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDate localDate = instant.atZone(zoneId).toLocalDate();

    展开全文
  • LocalDate API

    2019-04-16 11:46:47
    • static LocalTime now( ) 构造一个表示当前日期的对象。 • static LocalTime of(int year, int month , int day ) 构造一个表示给定日期的对象。 •int getYear( ) •int getMonthValue( ) ...
  • localdate java

    2019-08-28 10:52:38
    String startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String endTime = LocalDateTime.now().format(DateTimeForma...
  • LocalDate简介

    2017-06-16 18:35:38
    看看新的LocalDate怎么用: // 取当前日期: LocalDate today = LocalDate.now(); // -> 2014-12-24 // 根据年月日取日期,12月就是12: LocalDate crischristmas = LocalDate.of(2014, 12, 25); // -> 2014-12-...
  • LocalDate

    2020-01-13 17:08:39
    import java.time.LocalDate.*; import java.time.*; public class CalenderTest{ public static void main(String[] args){ LocalDate today = LocalDate.now(); int month = today.getMonthValue(); int d...
  • LocalDate test

    2018-09-17 11:37:00
    import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.TimeZone; import org.springframework.data.convert.Jsr310C.....
  • LocalDate的简单用法介绍

    千次阅读 2019-05-11 22:36:56
    一、背景 ...本文简单给出几个LocalDate的封装,展示一下基本用法。 大家可以多使用Java 8的时间相关类,功能更强大,代码更简洁。 二、上代码 Demo日期工具类 import java.math.BigDeci...
  • LocalDate笔记

    2020-06-05 17:07:41
    来源 ...LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。 LocalTime:本地时间,不包含日期。 LocalDateTime:组合了日期和时间,但不包含时差和时区信
  • Java LocalDate

    2020-07-13 23:34:52
    Java LocalDate class is part of Java 8 Date API. Java LocalDate类是Java 8 Date API的一部分。 Java LocalDate (Java LocalDate) Java LocalDate is immutable class and hence thread safe. Java LocalDate是...
  • LocalDate相关

    2020-09-16 09:13:26
    LocalDate相关 // 获取当前日期 LocalDate now = LocalDate.now(); // 2020-09-16 // 获取当前时间 LocalTime now1 = LocalTime.now().withNano(0); // 09:05:19 // 获取当前日期和时间 LocalDateTime ...

空空如也

1 2 3 4 5 ... 20
收藏数 3,457
精华内容 1,382
关键字:

localdate