要求:我想从新的Date()获取TimeZone字段,截至目前来自 new Date(),我的结果为
Wed Jul 23 19:37:20 GMT + 05:30 2014 ,但我只想 GMT + 05:30 ,有没有办法只获得这个?
PS:我不想使用拆分获取时区字段。因为这是我达到上述要求的最终选择。
答案 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();