Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从日期获取时区实例_Java - Fatal编程技术网

Java 从日期获取时区实例

Java 从日期获取时区实例,java,Java,使用以下代码- Timestamp ts = (Timestamp)results.get(0); SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z"); System.out.println(sdf.format(new Date(ts.getTime()))); 我得到的输出为:04/29/2013 15:08:30+0530 我想从时间戳创建一个时区实例,所以尝试了以下方法-

使用以下代码-

    Timestamp ts = (Timestamp)results.get(0);
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z");
    System.out.println(sdf.format(new Date(ts.getTime())));
我得到的输出为:04/29/2013 15:08:30+0530

我想从时间戳创建一个时区实例,所以尝试了以下方法-

    SimpleDateFormat FORMATTER = new SimpleDateFormat("Z");
    String tzString = FORMATTER.format(ts);

    // the tzString comes out to be +0530 (which is correct)

    TimeZone tz = TimeZone.getTimeZone(tzString);
    System.out.println(tz);
但最后一个时区实例是GMT,因为它无法识别+0530


那么,如何在这里获得正确的时区实例呢?

在模式中使用小写的
z
。这应该返回“GMT+0530”,这将起作用。

在模式中使用小写的
z
。这将返回
“GMT+0530”
,这将起作用。

您可以简单地执行以下操作,而不是使用
SimpleDataFormat
:-

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(ts.getTime()));
TimeZone tz = cal.getTimeZone();
System.out.println(tz);

您可以简单地执行以下操作,而不是使用
SimpleDataFormat
:-

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(ts.getTime()));
TimeZone tz = cal.getTimeZone();
System.out.println(tz);

无法从java.sql.Timestamp获取时区,因为它不包含时区。在你的情况下,你只是得到你的默认时区。这没有道理。与TimeZone.getDefault()相同

无法从java.sql.Timestamp获取时区,因为它不包含时区。在你的情况下,你只是得到你的默认时区。这没有道理。与TimeZone.getDefault()相同

我尝试了以下代码:

  Timestamp ts = new Timestamp(System.currentTimeMillis());
然后,为了从时间戳中获取时区实例,我执行了以下操作:

  SimpleDateFormat FORMATTER = new SimpleDateFormat("Z");
  TimeZone tzone = FORMATTER.getTimeZone();
  System.out.println(tzone.getDisplayName());
  System.out.println(tzone.getID());
我得到:

Central European Time
Europe/Berlin
所以我的时区是+0200,而不是格林尼治标准时间


希望这就是您想要的。

我尝试了以下代码:

  Timestamp ts = new Timestamp(System.currentTimeMillis());
然后,为了从时间戳中获取时区实例,我执行了以下操作:

  SimpleDateFormat FORMATTER = new SimpleDateFormat("Z");
  TimeZone tzone = FORMATTER.getTimeZone();
  System.out.println(tzone.getDisplayName());
  System.out.println(tzone.getID());
我得到:

Central European Time
Europe/Berlin
所以我的时区是+0200,而不是格林尼治标准时间


希望这就是你想要的。

我想你是对的。虽然我从一个日期获取时区实例,但它不是数据库的实例。无论如何,日期只是毫秒,没有时区。如果您是从带有时区的日期的字符串表示中获取它,那么这是有意义的。实际上,我正在尝试使用HQL获取数据库时区。让我看看Hibernate是否允许从数据库中获取时区字符串。我想让它成为通用的,这样它可以适用于所有数据库。我想你是对的。虽然我从一个日期获取时区实例,但它不是数据库的实例。无论如何,日期只是毫秒,没有时区。如果您是从带有时区的日期的字符串表示中获取它,那么这是有意义的。实际上,我正在尝试使用HQL获取数据库时区。让我看看Hibernate是否允许从数据库中获取时区字符串。我想让它成为通用的,这样它可以适用于所有数据库。我想这是本地时区,因为根本不使用ts(时间戳)。我想这是本地时区,因为根本不使用ts(时间戳)。