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



需求:我想从new Date()中只获得TimeZone字段,截至目前,从new Date(),我得到的结果

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

PS:我不想使用split来获取时区字段。因为这是我实现上述要求的最后选择。

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

这样你就可以这样做:

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

从这里开始。

假设您必须使用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!");
}

import java。util package并使用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的Date and Time类。

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

你的问题不准确。java.util.Date没有时区(假设总是使用UTC)。JVM的时区应用于对象的toString方法和其他生成String表示的格式化代码中。这就是你的解决方案:使用一个日期-时间格式化程序,它生成一个只包含UTC的偏移量的字符串,而不包含日期或时间部分。

避免使用java.util.Date &.Calendar h1> 免使用捆绑的java.util.Date和. calendar类,因为它们非常麻烦。相反,可以使用java - time或新的java。包的时间。两者都支持时区作为日期-时间对象的一部分。 <标题> Joda-Time h1> 面是如何在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();

相关内容

  • 没有找到相关文章

最新更新