首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【程序猿硬核科普】Java获取指定时间年月日 | 时间戳转换bug你的项目中招了吗 | yyyy和YYYY的区别

最近在知乎看到有篇回答说:跨年导致日期格式YYYY和yyyy导致日期显示Bug的帖子,微信公众号、一些论坛好多中招了,快来看看你的项目里面有没有这个bug吧,哈哈lo(╥﹏╥)o。...在网上有人发帖子说,腾讯的微信公众平台在2019年元旦所在的一周日期全部按照2020显示了,如2019-12-31显示为了2020-12-31。评论说应该是日期格式使用出错。 ?...下面是一个网友的复现日历格式bug的代码demo,我试了一下,结果不一样,大家也可以试一试,琢磨下日期格式YYYY和yyyy的区别,有兴趣的话可以在公众号后台留言,我们一起探讨下。...也就是说:年份如果用Y会是这周的年份,y才是标准的年份。结合上述例子来看,2019-12-31这一天,按照YYYY日历格式,已经算是2020的第一周了。...(推荐) 适用范围:需要下载并导入joda-time包。

2.3K10

Joda Time项目和java8时间api

比如月份依旧是从0开始计算(拿掉了由1990年开始计算年份这一设计)。更糟的是,有的特性只在某一个类有提供,比如用于语言无关方式格式化和解析日期或时间的DateFormat方法就只在Date类有。...java8时间api LocalDate,LocalTime LocalDate类的实例是一个不可变的对象,只提供了简单的日期,并不包含当前的时间信息(只关注与年月日)。...LocalDateTime 一个没有时区概念的日期-时间类在ISO-8601 日期系统中,比如2007-12-03T10:15:30 ?...TemporalAdjusters工厂类为我们提供了很多便捷的操作。 ? next/previous 创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星 期几要求的日期。...nextOrSame/previousOrSame 创建一个新的日期,并将其值设定为日期调整后或者调整前,第一个符合指定星 期几要求的日期,如果该日期已经符合要求,直接返回该对象。

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Joda-Time优雅的处理日期时间

    由于Joda-Time很优秀,在Java 8出现前的很长时间内成为Java中日期时间处理的事实标准,用来弥补JDK的不足。...,表示一个本地的日期,而不包含时间部分(没有时区信息) LocalTime - 不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息) LocalDateTime - 不可变的类,表示一个本地的日期...下面这个例子,将2000-02-29的年份设置为1997。值得注意的是,因为1997年没有2月29日,所以自动转为了28日。 ?...注意,在增减时间的时候,想象成自己在翻日历,所有的计算都将符合历法,由Joda-Time自动完成,不会出现非法的日期(比如:3月31日加一个月后,并不会出现4月31日)。...因为当时那个地区执行夏令时的原因,在添加一个Period的时候会添加23个小时。而添加一个Duration,则会精确地添加24个小时,而不考虑历法。

    1.6K20

    Java 的日期 API 真烂

    记得在我刚学 Java 的时候,真是搞不清楚 Date 和 Calendar 这两个类,后来我渐渐知道,原来不能全怪我啊,Java 日期 API 之烂是公认的(不妨参见这篇文章,Tiago Fernandez...做过一个投票,就是要选举最烂的 Java API,结果 Java 日期 API 排行第二,仅次于臭名远扬的 EJB2,嘿嘿)。...尝试 Joda 吧 最开始的时候,Date 既要承载日期信息,又要做日期之间的转换,还要做不同日期格式的显示,职责较繁杂,从 JDK 1.1 开始,这三项职责分开了: 使用 Calendar 类实现日期和时间字段之间转换...原有 Date 中的相应方法已废弃。不过,无论是 Date,还是 Calendar,都用着太不方便了,这是 API 没有设计好的地方。...比如 Calendar 的 getInstance 方法,并未提供一个指定年月日和时分秒的重载方法,每次要指定特定的日期时间,必须先获取一个表示当前时间的 Calendar 实例,再去设值,比如: Calendar

    63310

    Java时间处理神器之Joda-Time

    Joda 简介 为什么要使用 Joda?考虑创建一个用时间表示的某个随意的时刻 — 比如,2000 年 1 月 1 日 0 时 0 分。我如何创建一个用时间表示这个瞬间的 JDK 对象?...默认时间,即从运行代码的机器的系统时钟检索到的时间,在大部分情况下被使用。 创建 Joda-Time 对象 现在,我将展示在采用该库时会经常遇到的一些 Joda 类,并展示如何创建这些类的实例。...例如,晚上 11:52 可能是一天当中的一个重要时刻(比如,一个 cron 任务将启动,它将备份文件系统的某个部分),但是这个时间并没有特定于某一天,因此我不需要了解有关这一时刻的其他信息。...Interval:这个类表示一个特定的时间跨度,将使用一个明确的时刻界定这段时间跨度的范围。...可以在以下情况使用 Interval:需要表示在时间连续区间中以特定的点开始和结束的一段时间跨度。

    2.3K50

    深入理解Java常用类-----时间日期

    除了String这个类在日常的项目中比较常用之外,有关时间和日期的操作也是经常遇到的,本篇就讲详细介绍下Java API中对时间和日期的支持。...其实在Java 8之前时间日期的API并不是很好用,以至于人们在项目中大多使用的是一个第三方库 Joda-Time,当然Java 8 吸收了该库的大部分优点,改进了相关API,现在的时间日期处理接口相对以前来说是好用很多...loc) 四个参数,所有我们在调用工厂方法的时候没有提供的参数值都会使用默认值。...,字符串yyyy年MM月dd日 E HH时mm分ss秒就是一个模板pattern,其中: yyyy表示使用四位数字输出年份 MM表示使用两位数字表示月份 dd表示使用两位数字表示日 E表示星期几 HH表示使用两位数字表示小时...在该库中获取日期的操作被分解了,不像Calendar中共享一个int数组。

    1.2K80

    放弃 Calender优雅地使用Joda-Time吧Joda 大型项目Joda 简介Joda 和 JDK 互操作性Joda 的关键日期时间概念

    考虑创建一个用时间表示的某个随意的时刻 — 比如,2000 年 1 月 1 日 0 时 0 分。 我如何创建一个用时间表示这个瞬间的 JDK 对象?使用 java.util.Date?...默认时间,即从运行代码的机器的系统时钟检索到的时间,在大部分情况下被使用。 创建 Joda-Time 对象 现在,我将展示在采用该库时会经常遇到的一些 Joda 类,并展示如何创建这些类的实例。...例如,晚上 11:52 可能是一天当中的一个重要时刻(比如,一个 cron 任务将启动,它将备份文件系统的某个部分),但是这个时间并没有特定于某一天,因此我不需要了解有关这一时刻的其他信息。...Interval:这个类表示一个特定的时间跨度,将使用一个明确的时刻界定这段时间跨度的范围。...可以在以下情况使用 Interval:需要表示在时间连续区间中以特定的点开始和结束的一段时间跨度。

    1.5K70

    一文告诉你Java日期时间API到底有多烂

    日期是商业逻辑计算的一个关键部分,任何企业的程序都需要正确的处理日期时间问题,否则很可能带来事故和损失。为此本系列仅着眼于这一个点就写了好几篇文章,目的是帮助你系统化的搞定所有问题/难题。...反正我是不能的~ 罪状五:无法处理时区 因为日期时间的特殊性,不同的国家地区在同一时刻显示的日期时间应该是不一样的,但Date做不到,因为它底层代码是这样的: [20210122010914581.png...最重要的是Calendar的API使用起来真的很不方便,而且该类在语义上也完全不符合日期/时间的含义,使用起来更显尴尬。...并不孤单 日期时间API属于基础API,在各个语言中都是必备的。...不客气的说JSR 310是在Joda-Time的基础上建立的,参考了其绝大部分的API实现,因此若你之前是Joda-Time的重度使用者,现在迁移到Java 8原生的JSR 310日期时间上来几乎无缝。

    1K71

    一文告诉你Java日期时间API到底有多烂

    日期是商业逻辑计算的一个关键部分,任何企业的程序都需要正确的处理日期时间问题,否则很可能带来事故和损失。为此本系列仅着眼于这一个点就写了好几篇文章,目的是帮助你系统化的搞定所有问题/难题。...反正我是不能的~ 罪状五:无法处理时区 因为日期时间的特殊性,不同的国家地区在同一时刻显示的日期时间应该是不一样的,但Date做不到,因为它底层代码是这样的: 也就是说它表示的是一个具体时刻(...最重要的是Calendar的API使用起来真的很不方便,而且该类在语义上也完全不符合日期/时间的含义,使用起来更显尴尬。...并不孤单 日期时间API属于基础API,在各个语言中都是必备的。...不客气的说JSR 310是在Joda-Time的基础上建立的,参考了其绝大部分的API实现,因此若你之前是Joda-Time的重度使用者,现在迁移到Java 8原生的JSR 310日期时间上来几乎无缝。

    79240

    Java8新特性:新的时间和日期类库

    由于以上这些问题,出现了一些三方的日期处理框架,例如Joda-Time,date4j等开源项目。但是,Java需要一套标准的用于处理时间和日期的框架,于是Java 8中引入了新的日期API。...新的日期API是JSR-310规范的实现,Joda-Time框架的作者正是JSR-310的规范的倡导者,所以能从Java 8的日期API中看到很多Joda-Time的特性。...可以通过LocalDate的静态方法of()创建一个实例,LocalDate也包含一些方法用来获取年份,月份,天,星期几等: LocalDate localDate = LocalDate.of(2017...此外Java 8还提供了4套其他历法(很奇怪为什么没有汉族人使用的农历),每套历法都包含一个日期类,分别是: ThaiBuddhistDate:泰国佛教历 MinguoDate:中华民国历 JapaneseDate...再比如假设年份是累加的,过了一年就在原来的年份上加一,但日本天皇在换代之后需要重新纪年,所以过了一年年份可能会从1开始计算。

    1.7K10

    【Java8新特性】06 新的日期和时间:LocalDate LocalTime LocalDateTime

    (1) Date java.util.Date类是Jdk 1.0引入的,易用性非常糟糕,比如年份的起始是1900年,月份的起始是0。...比如要表示2019年6月18日,创建一个Date实例: Date date = new Date(119, 5, 18); Date类已经不推荐使用了。...不幸的是Calendar没有扛起大任,仍然暴露出很多设计缺陷,导致写代码时容易出现问题,比如月份还是从0开始。 由于Date和Calendar推出的时间很接近,造成程序员对使用哪个类感到困惑。...还有一个很大的问题,Date和Calendar都是可变的类,这种设计会导致程序出现各种问题。...Date和Calendar的种种问题导致程序员们纷纷抛弃原生的jdk日期时间库,转投第三方组件如Joda-Time,Java设计者似乎意识到这个问题,在借鉴Joda-Time的基础上终于在Java8版本中加入了新的日期时间包

    1.3K20

    (32) 剖析日期和时间 计算机程序的思维逻辑

    本节和下节,我们讨论在Java中如何进行日期和时间相关的操作。...日期和时间是一个比较复杂的概念,Java API中对它的支持不是特别好,有一个第三方的类库反而特别受欢迎,这个类库是Joda-Time,Java 1.8受Joda-Time影响,重新设计了日期和时间API...虽然之前的设计有一些不足,但Java API依然是被大量使用的,本节介绍Java 1.8之前API中对日期和时间的支持,下节介绍Joda-Time,Java 1.8中的新API与Joda-Time比较类似...getInstance方法会根据TimeZone和Locale创建对应的Calendar子类对象,在中文系统中,子类一般是表示公历的GregorianCalendar。...除了add,Calendar还有一个类似的方法: public void roll(int field, int amount) 与add的区别是,这个方法不影响时间范围更大的字段值。

    2K100

    Java Review (二十一、基础类库----日期、时间类)

    Java 原本提供了 Date 和 Calendar 用于处理日期、时间的类,包括创建日期 、 时间对象,获取系统当前日期、时间等操作 。...Java 8 吸取了 Joda-Time 库( 一个被广泛使用的日期、 时间库)的经验 , 提供了一套全新的日期时间库 。 在计算机中只需要存储一个整数表示某一时刻。...当需要显示为某一地区的当地时间时,就把它格式化为一个字符串 Date 类 Date(): 生成一个代表当前日期时间的 Date 对象 。...当然,也可以创建自己的 Calendar 子类,然后将它作为 Calendar 对象使用。 Calendar 类是一个抽象类,所以不能使用构造器来创建 Calendar 对象 。...void roll(int field, int amount): 与 addO方法类似,区别在于加上 amount 后超过了该字段所能表 示的最大范围时,也不会向上一个字段进位 。

    80430

    Java基础篇(04):日期与时间API用法详解

    一、时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分析,集群节点统一时间避免超时等。...在时间和日期中有几个关键概念: 日期:通常年月日的组合表示当前日期。 时间:通常时分秒的组合表示当前时间。 时区:世界各国家与地区经度不同,划分24个标准时区,相邻时区的时间相差一个小时。...日期和时间的用法在系统中通常是获取时间和一些常见的计算与格式转换处理,在一些垮时区的业务中就会变的复杂很多,例如在电商业务中的全球贸易或者海淘等。...4、时间戳 时间戳也是业务中常用的方式,基于Long类型表示时间,在很多时候远比常规日期与时间的格式更好用。...> 在joda-time提供的组件之上做一个简单的工具类封装,保证业务处理风格统一。

    58110

    Java8 Date Time API

    简介 Java8 带来了全新的处理日期和时间的方式。几乎所有人都有使用Java Date API痛苦的经历。因此有很多人切换到了Joda Time,但是Java8现在有了媲美Joda的时间API。...在这个包里比较重要的API有: java.time.Period: 表示日期时期时间中的日期。表示日期部分的,年、月、日。例如:1年,两个月,5天。...保存的是UNIX时间戳的秒数,同时有另一个字段保存纳秒。 java.time.LocalDate: 保存日期时间中的日期,用年-月-日表示。不包含时区,是不可变类。...创建本地日期 Instant now = Instant.now(); //2014-09-20T14:32:33.646Z 这个语句创建了一个新的时间实例。...检查Instant是否在另一个Instant之后 System.out.println(now.isAfter(yesterday));// prints true 创建LocalDateTime LocalDateTime

    1.1K20

    尽管Java8时间库有所进步,但总感觉Low了点,有同感吗?

    p=5133 最近有网友表示,在自己公司和项目中,实际上时间库应用不算太多,用到也是非常简单的一些应用场景,一般情况下连Java8的时间库都很少用到,今天为了写个时间查询,把他折腾的够呛,是他没有领悟到...Java8时间库的精髓吗?...一起来看看吧 需求:给定一个时间范围:Date from, Date to,查询出在这时间范围内的记录并按日期(年月日)分组,每条记录的日期是包含日期和时间的,需要进行Truncate。...如果只输入一个日期,那么只统计该天的所有记录,即0时0分0秒到23时59分59秒之间的记录。 问题1:Java8中的LocalDate与Date互转 ?...Java8时间库的写法 堂堂 Java8 的时间库,连基本的截取(truncate)操作都木有,哎,说你什么好呢,“渣瓦”! 我们再看看Joda的“骚”操作: ?

    53220

    详解Java8的日期和时间API

    的API还是不尽如人意,,存在实例易变、没有处理闰秒等等的问题。...新的日期API是JSR-310规范的实现,Joda-Time框架的作者正是JSR-310的规范的倡导者,所以能从Java 8的日期API中看到很多Joda-Time的特性。...Instant可以精确到纳秒,这超过了long的最大表示范围,所以在Instant的实现中是分成了两部分来表示,一部分是seconds,表示从1970-01-01 00:00:00开始到现在的秒数,另一个部分是...可以通过LocalDate的静态方法of()创建一个实例,LocalDate也包含一些方法用来获取年份,月份,天,星期几等:LocalDate localDate = LocalDate.of(2020...()方法创建Duration对象: 日期操作和格式化 在上面对java.time包中的类的介绍中已经提到,Java8的的日期和时间类都实现了Temporal、TemporalAdjuster,然后在temporal

    2.1K11

    spring定时任务详解(@Scheduled注解)

    (1970-2099) 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。...由于”月份中的日期”和”星期中的日期”这两个元素互斥的,必须要对其中一个设置?. 0 0 10,14,16 * * ?...例如:“6L”表示这个月的倒数第6天 注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题 W 字符代表着平日(Mon-Fri),并且仅能用于日域中。...它用来指定离指定日的最近的一个平日。大部分的商业处理都是基于工作周的,所以 W 字符可能是非常重要的。 例如,日域中的 15W 意味着 “离该月15号的最近一个平日。”...C:代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。

    1.6K20
    领券