从java中的新Date()获取TimeZone字段

时间:2014-07-23 14:14:40

标签: java date timezone

要求:我想从新的Date()获取TimeZone字段,截至目前来自 new Date(),我的结果为

Wed Jul 23 19:37:20 GMT + 05:30 2014 ,但我只想 GMT + 05:30 ,有没有办法只获得这个?

PS:我不想使用拆分获取时区字段。因为这是我达到上述要求的最终选择。

4 个答案:

答案 0 :(得分:1)

您应该使用Calendar类,并且可能使用实现GregorianCalendar。许多Date函数已被弃用,转而使用Calendar。 Java 8具有Clock API,但我在这里假设Java 7。

这样你可以这样做:

Calendar calendar = new GregorianCalendar();
TimeZone tz = calendar.getTimeZone();

从那里开始工作。

答案 1 :(得分:0)

导入 java.util包并使用 GregorianCalendar 方法。

int second, minute, hour;
GregorianCalendar date = new GregorianCalendar();

second = date.get(Calendar.SECOND);
minute = date.get(Calendar.MINUTE);
hour = date.get(Calendar.HOUR);

System.out.println("Current time is  "+hour+" : "+minute+" : "+second);

不要使用java.util包的Date和Time类,因为不推荐使用它们的方法意味着它们在将来的JDK版本中可能不受支持。

答案 2 :(得分:0)

假设您必须使用String输入,您可以执行以下操作:

// format : dow mon dd hh:mm:ss zzz yyyy
String date = "Wed Jul 23 19:37:20 GMT+05:30 2014";
Pattern pattern = Pattern
    .compile("^\\w{3}\\s\\w{3}\\s\\d{2}\\s\\d{2}:\\d{2}:\\d{2}\\s?(.*)\\s\\d{4}$");
Matcher matcher = pattern.matcher(date);
if (matcher.matches()) {
  String timezone = matcher.group(1);
  // beware : according to the Date.toString() documentation the timezone
  // value can be empty
  System.out.println(timezone);
} else {
  System.out.println("doesn't match!");
}

答案 3 :(得分:-1)

生成具有偏移但没有日期和没有时间的字符串

您的问题不准确。 java.util.Date没有时区(假设始终为UTC)。 JVM的时区应用于对象“toString方法”以及生成字符串表示形式的其他格式代码中。您的解决方案就在于:使用日期时格式化程序生成一个字符串,该字符串仅包含UTC的偏移量,而不包含日期或时间部分。

避免java.util.Date& .Calendar

避免使用捆绑的java.util.Date和.Calendar类,因为它们非常麻烦。而是使用Joda-Time或新的java.time包。两者都支持时区作为日期时间对象的一部分。

约达时间

以下是如何在Joda-Time 2.3中生成DateTime的String表示。

DateTime dateTime = new DateTime( DateTimeZone.forID( "Asia/Kolkata" ) );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "ZZ" );
String offset = formatter.print( dateTime );  // generates: +05:30

在Joda-Time 2.3中,您可以向DateTime对象请求其指定的时区作为对象。然后,您可以询问DateTimeZone对象。

DateTime dateTime = new DateTime( DateTimeZone.forID( "Asia/Kolkata" ) );
DateTimeZone timeZone = dateTime.getZone();
String id = timeZone.getID();