Java中YYYY-MM-dd与yyyy-MM-dd的区别及跨年问题
作者:小湘西
大写YYYY的用途
大写的YYYY
通常用于表示“周年”,在某些编程语言或者数据格式中,比如ISO 8601日期格式中,YYYY
可能代表的是所在周属于的年份。这意味着,如果一周跨越了两个不同的年份,该周会被归属到哪一年取决于这周中的大部分日子属于哪一年。
小写yyyy的用途
小写的yyyy
则是更常见的表示方法,用于表示“日历年”。无论日期所在的周是否跨年,yyyy
总是代表实际的年份。
实际影响
在大多数情况下,人们使用yyyy-MM-dd
格式,因为它符合日常生活中对日期的理解和使用。而在一些需要按周计算时间的场合,可能会用到YYYY
格式,尤其是在财务报告或者具有特定周计算需求的行业中。
样例
public class DateFormatExample { public static void main(String[] args) { // 使用Calendar获取一个日期实例 Calendar calendar = Calendar.getInstance(); // 假设日期是2023年12月31日 calendar.set(2023, Calendar.DECEMBER, 31); // 使用YYYY格式化日期 SimpleDateFormat formatWithYYYY = new SimpleDateFormat("YYYY-MM-dd"); String dateWithYYYY = formatWithYYYY.format(calendar.getTime()); System.out.println("Date with YYYY: " + dateWithYYYY); // 输出的是2024-12-31,因为12月31日属于第1周,而该周属于下一年 // 使用yyyy格式化日期 SimpleDateFormat formatWithyyyy = new SimpleDateFormat("yyyy-MM-dd"); String dateWithyyyy = formatWithyyyy.format(calendar.getTime()); System.out.println("Date with yyyy: " + dateWithyyyy); // 输出2023-12-31 } }
结论
YYYY-MM-dd
可能会导致跨年周的日期被归属到错误的年份。yyyy-MM-dd
总是表示实际的日历年份,无论日期所在的周是否跨年。- 在编写代码或者设置日期格式时,需要根据实际需求选择合适的年份表示方法。
如果使用日期格式不当,可能会在数据处理、日志记录或者时间计算等方面造成混淆和错误。因此,在处理日期和时间时,了解并正确使用这些日期格式是非常重要的。
补充
常用格式为:yyyy-MM-dd HH:mm:ss
以 2019-12-31 06:07:59:666 时间为例:
字符 | 含义 | Example |
y(小写的y) | 年 | yyyy---->2019 |
M(大写的M) | 月 | MM---->12 |
d(小写的d) | 一月中的天数 | dd---->31 |
H(24 小时制,大写的H) | 小时(0-23) | HH---->18 |
h(12 小时制,小写的h) | 小时(1-12) | hh---->06 |
m(小写的m) | 分 | mm---->07 |
s(小写的s) | 秒 | ss---->59 |
S(大写的S) | 毫秒 | SSS---->666 |
Y(大写的y) | Week Year | YYYY---->2020 |
D(大写的D) | 一年中天数 | DD---->365 |
yyyy-MM-dd与YYYY-MM-dd区别在哪里?
Y 代表 Week Year,表示当天周所在的年份。这种方式将会把一年划分成52 周/53周(类似于闰年的概念,每隔几年将会增加一周)。Week Year下每周仅属于某一年,如果某年的第一周或最后一周跨年,就会导致部分日期年份与实际不符。
oracle和java的日期格式的差异
java中的的日期格式为:
yyyy-MM-dd HH:mm:ss:代表将时间转换为24小时制,例: 2020-01-07 13:21:55
yyyy-MM-dd hh:mm:ss:代表将时间转换为12小时制,例: 2020-01-07 03:24:21
oracle中的日期格式为(不区分大小写):
yyyy-MM-dd HH24:mi:ss:代表oracle中的24小时制,例:2020/1/7 13:21:55
yyyy-MM-dd HH:mi:ss: 代表oracle中的12小时制,例:2020/1/7 9:21:55
之所以 oracle和java不同,是因为我们知道oracle是不区分大小写的,所以java中根据大小写来代表24小时和12小时的表达式在oracle中就会出问题,oracle中将24小时的时和分做了特殊处理.如上所示,在hh后面加上了24,将mm改为了mi.
到此这篇关于Java中YYYY-MM-dd与yyyy-MM-dd的区别及跨年问题的文章就介绍到这了,更多相关Java YYYY-MM-dd与yyyy-MM-dd内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!