Java中解决'Tue Apr 14 04:51:40 CST 2020'格式转成‘2020-04-14 04:51:40’的问题

问题出现:

项目中,遇到了一个坑,搞了一晚上,特此一记。Mysql查询出来的时间是Tue Apr 14  04:51:40 CST 2020这种格式,在页面使用 <fmt:formatDate value="${list.statisticsDate}" pattern="yyyy-MM-dd HH:mm:ss" /> 还能够显示成 2020-04-14 04:51:40 这种格式,但是这个时间作为sql的查询条件传给dao之后就有问题了。查了好多资料,自己用了下还是不行,因为这是美式时间,即使使用网上的办法转为2020-04-14 04:51:40发现有时差。自己查了下项目代码,发现有这种实现可以处理这种问题,可做参考。

环境说明:

Mysql数据库, 阿里云上的drds。这个时间字段在数据库中是Datetime 时间格式,在实体类中是String类型。

问题解决:

配置如下:

1.Mysql数据库:STATISTICS_DATE  --类型 Datetime  --统计时间

2.Pojo: StockDetailQuery.java

方案是:POJO先定义几个字段如下,然后生成它们的getter和setter方法,后边会用到。

String statisticsDate; //统计时间

/**
     * 用于时间处理
     */
    private String  date1;
    private String  date2;
    private String  date3;
    private String  date4;

    private String  ptime1;
    private String  ptime2;
    private String  ptime3;
    private String  ptime4;
   /**
     * getters and setters
     */

   public String getDate1() {
        return date1;
    }

    public void setDate1(String date1) {
        this.date1 = date1;
    }

   其他的getter和setter此处省略

工具类类里方法如下:

/**
     * 获取时间
     */
    public StockDetailQuery getDateTime(StockDetailQuery query) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 当日
        Date d1 = new Date();
        Calendar instance = Calendar.getInstance();
        String dateTime = "";
        instance.setTime(d1);
        // 时
        instance.set(Calendar.HOUR_OF_DAY, 0);
        // 分
        instance.set(Calendar.MINUTE, 0);
        // 秒
        instance.set(Calendar.SECOND, 0);

        dateTime = sdf.format(instance.getTime());
        query.setPtime1(dateTime);
        // 第二日
        instance.add(Calendar.DATE, 1);
        dateTime = sdf.format(instance.getTime());
        query.setPtime2(dateTime);
        // 第三日
        instance.add(Calendar.DATE, 1);
        dateTime = sdf.format(instance.getTime());
        query.setPtime3(dateTime);
        // 第四日
        instance.add(Calendar.DATE, 1);
        dateTime = sdf.format(instance.getTime());
        query.setPtime4(dateTime);
        return query;
    }

需要转换时间的类中方法如下:

@RequestMapping(value = "stockNumberQuery")
    public String stockNumberQuery(@ModelAttribute("query") StockDetailQuery query, HttpServletRequest request,
        Model model) {      

       // 获取时分秒
        getDateTime(query);

        // 格式化STATISTICS_DATE
        String pattern = "EEE MMM dd HH:mm:ss zzz yyyy";
        SimpleDateFormat df = new SimpleDateFormat(pattern, Locale.US);
        try {
            Date date = df.parse(query.getStatisticsDate());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateString = simpleDateFormat.format(date);
            // 格式化之后STATISTICS_DATE放回查询对象
            query.setStatisticsDate(dateString);
        }
        catch (ParseException e) {
            e.printStackTrace();
        }

      .........

}

自此,该问题得以解决,如有问题欢迎留言。如果对您有帮助,点个赞就算是对我最好的鼓励了。

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值