Java 日期格式(yyyy-MM-dd HH:mm:ss SSS)

常用格式为: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下每周仅属于某一年,如果某年的第一周或最后一周跨年,就会导致部分日期年份与实际不符。

Week Year 存在两种标准:

ISO 8601:国际标准,每周从周一开始,每年的第一周至少包含 4 天

Common:通用标准,每周从周日开始,每年的第一周至少包含 1 天

使用 ISO 8601 标准,分别看一下最后一周跨年以及第一周跨年的例子。

2015 年最后一周跨年,2016 前三天(与2015年12月的前四天默认是一周,是2015的周)使用 YYYY 最后结果为 2015,时间看起来被回退了。

2020 年第一周跨年,2019 年最后两天(不足4天,所以默认为下周,下周为2020年的周)使用 YYYY 结果为 2020。

    

代码验证

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
    public static void main(String[] args) {
        // 将指定时间转换成时间戳,再由时间戳转换成时间
        String Stime = "2015-01-01 17:17:22"; // 处理前的时间
        long Ltime = 0; // 时间戳

        System.out.println("处理前的时间:" + Stime);

        // 时间转为时间戳
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date2 = simpleDateFormat.parse(Stime);
            Ltime = date2.getTime();
            System.out.println("时间转时间戳结果:" + Ltime);
        } catch (ParseException | java.text.ParseException e) {
            e.printStackTrace();
        }

        //将时间戳转换为时间
        String res = simpleDateFormat.format(Ltime);
        System.out.println("时间戳转时间结果:" + res);
    }
}

运行结果:

处理前的时间:2015-01-01 17:17:22

时间转时间戳结果:1420103842000

时间戳转时间结果:2015-01-01 17:17:22

可以看出两次时间是一样的。

将代码中的yyyy改为YYYY后

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

运行结果:

处理前的时间:2015-01-01 17:17:22

时间转时间戳结果:1419758242000

时间戳转时间结果:2015-12-28 17:17:22

可以看出两次时间不是一样的。

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.

大部分内容转载自: 关于日期格式你必须知道的坑( yyyy-MM-dd HH:mm:ss SSS)_yyyy-mm-dd hh:mm:ss.sss_37358143的博客-CSDN博客

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值