解析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;

    }

转载于:https://www.cnblogs.com/windpoplar/p/10908645.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用`java.sql.ResultSet`接口来从数据库中读取数据。如果你的数据库中存储的是日期类,你可以使用`java.sql.Date`类或`java.sql.Timestamp`类来表示这些日期。 对于不同的时区,你可以使用`java.util.TimeZone`类来表示。例如,`TimeZone.getTimeZone("GMT+8")`表示东八区,`TimeZone.getTimeZone("GMT+9")`表示东九区。 下面是一个示例代码,演示如何从数据库中读取日期数据,并将其转换为Java中的`java.util.Date`对象: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Date; import java.util.TimeZone; public class ReadDateFromDatabase { public static void main(String[] args) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase", "username", "password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT date_column FROM mytable"); while (rs.next()) { Date date = rs.getDate("date_column"); TimeZone timeZone = TimeZone.getTimeZone("GMT+8"); // or "GMT+9" or any other time zone date.setTime(date.getTime() + timeZone.getRawOffset()); System.out.println(date); } rs.close(); stmt.close(); conn.close(); } } ``` 在这个示例中,我们首先使用`DriverManager.getConnection()`方法获取数据库连接。然后,我们使用`Statement.executeQuery()`方法执行查询语句,并将结果存储在`ResultSet`对象中。接下来,我们使用`ResultSet.getDate()`方法获取日期数据,并将其转换为`java.util.Date`对象。最后,我们使用`TimeZone.getRawOffset()`方法获取时区的偏移量,并使用`Date.setTime()`方法调整日期的时间戳,以便它反映正确的时区

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值