那些年在 java.util.Date类中踩的坑(1):数据类型不对导致数据库没查到值,以及关于时间的 String与 Date 、 Long 与Date 类型之间的转换

1 篇文章 0 订阅
1 篇文章 0 订阅

一朋友遇到一个bug:在数据库查是没有问题的,但是在后台查的时候没查出来,传递过去的字段都是正确的,就是不知道为什么没查出来。

我看了一下代码,没发现有什么不一样,开始debug,发现确实他在使用一个时间字段在数据库查的时候,用的“yyyy-MM-ss”格式,但是后台传过来的时间字段值,是日期的毫秒值,这样子肯定查不到啦。

关于时间的 String与 Date 、 Long 与Date 类型之间的转换

  • Date类型转为Long类型(毫秒值)

try {
        Date d = new SimpleDateFormat("yyyy-MM-ss HH:mm:ss").parse("2020-04-01 00:00:00");
        long time = d.getTime();
        System.out.println("时间:"+time);
    } catch (ParseException e) {
        e.printStackTrace();
}

结果:输出从 1970 年 1 月 1 日 00:00:00 GMT)以来到2020年04月01日00:00:00 的毫秒值

  • Long类型(毫秒值)转为Date类型

使用构造函数:public Date(long date)。

分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

Date date = new Date();
long time = date.getTime();
Date date1 = new Date(time);
System.out.println(date1);

结果:输出一个默认的时间

  • Date类型转为String类型

    • 先介绍一下 java.text.SimpleDateFormat 类:

      • SimpleDateFormat  是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

      • 日期和时间模式:

        • 日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 'A''Z''a''z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。

        • 定义了以下模式字母(所有其他字符 'A''Z''a''z' 都被保留):

例子:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = simpleDateFormat.format(new Date());
System.out.println("日期:"+dateStr);

结果:输出一个格式为“年-月-日”的字符串时间

当然啦,你也可以使用万能的 toString() 方法,不过获取到的是时区日期:

  System.out.println("时间:"+new  Date().toString() );

 结果:

  • String类型转为Date类型

1、 方法一:使用 parse( ) 方法

parse( ) 方法是从 Java.text.DateFormat 继承的方法。

public Date parse(String source) throws ParseException:从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。在如果无法解析指定字符串的开始处抛出 ParseException 异常。有关日期解析的更多信息,请参阅 parse(String, ParsePosition) 方法。

例子:

try {
        Date date = simpleDateFormat.parse("2020-06-04");
        System.out.println("日期:"+date);
    } catch (ParseException e) {
        e.printStackTrace();
}

 结果:显示的是一个默认的日期哦

 2、方法二:使用 format( )方法

 format( ) 是 SimpleDateFormat 类的一个方法,返回的是一个  StringBuffer  类型的数据。

format(Date date, StringBuffer toAppendTo, FieldPosition pos)
          将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer

例子: 

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = simpleDateFormat.format(new Date());
System.out.println("日期:"+dateStr);

结果:输出一个格式为“年-月-日”的日期

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值