nacos配置时间问题-配置时间和日志打印时间不一致

1.问题描述

        nacos配置的时间起止时间分别是2023-06-01 00:00:00和2023-06-15 23:59:59(图1所示),但是打印出的日志时间如图2所示,两者差了8个小时

图1

图2

 MarginAccountModel marginAccountModel = marginAccountDAO.queryById(request.getMarginAccountId());
        CalculateGivingAmtPOJO calculateGivingAmtPOJO = new CalculateGivingAmtPOJO();
        String activityStartTime = rechargeGivingActivityProperties.getStartTime();
        String activityEndTime = rechargeGivingActivityProperties.getEndTime();
        Integer activityStatus = rechargeGivingActivityProperties.getStatus();
        BigDecimal rechargeAmt = request.getRechargeAmt();
        //判断活动是否结束
        long startTime = DateUtils.glTimeToTimestamp(activityStartTime).getTime();
        long endTime = DateUtils.glTimeToTimestamp(activityEndTime).getTime();
        log.info("赠送的开始时间是:{},结束时间是:{}", activityStartTime, activityEndTime);

/**
     * @param time
     * @desc 格林时间格式转化
     * @example time="Tue Jul 13 08:00:00 CST 2021"
     **/
    public static Date glTimeToTimestamp(String time) {
        Date parse = null;
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
            parse = simpleDateFormat.parse(time);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return parse;
    }

2.原因分析

        不带引号的时间字符串在计算机中被解释为GMT时间(即UTC时间),而不是本地时间。因此,无论你在哪个时区,计算机都会将其解读为GMT时间,并在必要时将其转换为本地时间。这是因为计算机系统中的时间通常以UTC的形式进行存储和处理,而不是以本地时间的形式进行处理。因此,如果你使用不带引号的时间字符串,它将自动被解释为GMT时间。

        修正后,图3的配置和图4的日志就能够对应上

图3

图4

修正后的相应代码

 MarginAccountModel marginAccountModel = marginAccountDAO.queryById(request.getMarginAccountId());
        CalculateGivingAmtPOJO calculateGivingAmtPOJO = new CalculateGivingAmtPOJO();
        String activityStartTime = rechargeGivingActivityProperties.getStartTime();
        String activityEndTime = rechargeGivingActivityProperties.getEndTime();
        Integer activityStatus = rechargeGivingActivityProperties.getStatus();
        BigDecimal rechargeAmt = request.getRechargeAmt();
        //判断活动是否结束
        long startTime = DateUtils.getTimestamp(activityStartTime);
        long endTime = DateUtils.getTimestamp(activityEndTime);
        log.info("赠送的开始时间是:{},结束时间是:{}", activityStartTime, activityEndTime);

 /**
     * @param time
     * @desc 字符串转时间戳
     * @example time="2019-04-19 00:00:00"
     **/
    public static Long getTimestamp(String time) {
        Long timestamp = null;
        try {
            timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time).getTime();
        } catch (Exception e) {
            log.error("解析时间异常,异常信息为 {}, e= {}",e.getMessage(),e);
        }
        return timestamp;
    }
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值