zoukankan      html  css  js  c++  java
  • 解析GMT+N时区,返回日期类型

    涉及到正则表达式,时区转换。

    /**

        * 

        * 按格式 yyyy-MM-dd HH:mm:ss 以指定GMT时区进行解析,返回对应的当前系统时区当地时间。

        * @param dateString  格式 yyyy-MM-dd HH:mm:ss

        * @param timeZoneGMT  格式GMT+8,GMT-7,GMT+09:00,GMT-06:00

        * @return

        * @throws ParseException

        */

      public static Date parseGMTDate(String dateString, String timeZoneGMT) throws ParseException {

          String timeZoneGMTRegex = "^GMT[-+](\d{1,2})(:?(\d\d))?$";

          if (timeZoneGMT.matches(timeZoneGMTRegex)) {

          TimeZone timeZone = TimeZone.getTimeZone(timeZoneGMT);

          return parseDate(dateString, "yyyy-MM-dd HH:mm:ss", timeZone,null);

          }

          throw new ParseException(String.format("input GMT time zone format ['%s'] error ",timeZoneGMT),0);

      }

    /**

        * 按指定格式 <code>pattern</code> 和指定时区进行解析,返回对应的当前系统时区当地时间。

        *

        * @param date

        * @param pattern  格式参考 {@link SimpleDateFormat}

        * @param timeZone

        * @return

        * @throws ParseException

        */

        public static Date parseDate(String date, String pattern, TimeZone timeZone,Locale locale) throws ParseException {

            Objects.requireNonNull(date, "date");

            Objects.requireNonNull(pattern, "pattern");

            SimpleDateFormat format = getSimpleDateFormat(pattern, timeZone, locale);

            return format.parse(date);

        }

    private static SimpleDateFormat getSimpleDateFormat(String pattern, TimeZone timeZone, Locale locale) {

            if (timeZone == null) {

                timeZone = TimeZone.getDefault();

            }

            // 每次实例化 SimpleDateFormat 需要解析 pattern,非常耗时,但其本身又是线程不安全的,因此借用 ThreadLocal

            LRU<String, SimpleDateFormat> formatMap = formats.get();

            if (formatMap == null) {

                formatMap = new LRU<String, SimpleDateFormat>(128);

                formats.set(formatMap);

            }

            String formatId = pattern + timeZone.getID();

            SimpleDateFormat format = formatMap.get(formatId);

            if (format == null) {

                if(locale != null){

                    format = new SimpleDateFormat(pattern,locale);

                }else{

                    format = new SimpleDateFormat(pattern);

                }

                if (!format.getTimeZone().equals(timeZone)) {

                    format.setTimeZone(timeZone);

                }

                formatMap.put(formatId, format);

            }

            return format;

        }

  • 相关阅读:
    构建TensorFlow数据流图
    Python小练习:复制操作
    Python小练习:列表的相关操作
    【Jave】接入极光推送 ------- 封装极光推送工具类
    jenkins邮件-使用变量定制化html邮件报告
    十六进制的颜色转变为rgb,设置透明度,通用方法
    一. Go微服务--隔离设计
    7.23 学习笔记
    7.22 学习笔记
    8.28正睿CSP七连测day1
  • 原文地址:https://www.cnblogs.com/windpoplar/p/10908645.html
Copyright © 2011-2022 走看看