服务器发送我的时间是这样的:
2012-06-08 17:00:00 +0100
我需要改变它像HH:MM
基于本地时间。 例如这次在日本,印度什么时候,美国等。
我怎样才能做到这一点? 谢谢
服务器发送我的时间是这样的:
2012-06-08 17:00:00 +0100
我需要改变它像HH:MM
基于本地时间。 例如这次在日本,印度什么时候,美国等。
我怎样才能做到这一点? 谢谢
选项1:使用java.util.Date
/ Calendar
:
首先,你需要的价值解析到一个Date
,然后在你感兴趣的格式和时区格式化它:
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z",
Locale.US);
Date date = inputFormat.parse(inputText);
// Potentially use the default locale. This will use the local time zone already.
SimpleDateFormat outputFormat = new SimpleDateFormat("HH:mm", Locale.US);
String outputText = outputFormat.format(date);
选项2:使用约达时间
乔达时间是Java更好的日期/时间库。
DateTimeFormatter inputFormatter = DateTimeFormat
.forPattern("yyyy-MM-dd HH:mm:ss Z")
.withLocale(Locale.US);
DateTime parsed = inputFormatter.parseDateTime(inputText);
DateTimeFormatter outputFormatter = DateTimeFormat
.forPattern("HH:mm")
.withLocale(Locale.US)
.withZone(DateTimeZone.getDefault());
String outputText = outputFormatter.print(parsed);
请注意,您应该只从字符串表示转换成/当你真的需要。 否则,使用基于您的使用最合适的类型 - 这是在约达时间真正的亮点。
使用JodaTime。 这远远高于Java的日期和时间API更好,更安全。 有很多会返回一个本地时间对象的方法(HH:MM)。
作为一个例子,新的日期时间(你的约会时间).toLocalTime();
java.util.Date 总是在UTC。 是什么让你觉得它在本地时间? 我怀疑问题是,你通过它使用本地时区日历的实例显示,或者可能使用Date.toString(),它也使用本地时区。
如果这不是问题,请张贴一些示例代码。
我会,不过,建议你使用乔达时间 ,无论如何,它提供了一个更清晰的API。
其他的答案是正确的,但已经过时。 使用java.time类来代替。
ZonedDateTime zdt_Kolkata = OffsetDateTime.parse( "2012-06-08 17:00:00 +0100" , DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss Z" ) ).atZone( ZoneId.of( "Asia/Kolkata" ) );
定义一个DateTimeFormatter
格式化模式来匹配您的输入字符串。
String input = "2012-06-08 17:00:00 +0100";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss Z" );
OffsetDateTime
解析字符串作为OffsetDateTime
表示对象+0100
在你的输入,这意味着“UTC提前一小时”。
OffsetDateTime odt = OffsetDateTime.parse( input , f );
ZonedDateTime
应用ZoneId
产生ZonedDateTime
任何所需的时区。 指定适当的时区名称 。 切勿使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,不规范,甚至不是唯一的(!)。
ZoneId zoneId_Kolkata = ZoneId.of( "Asia/Kolkata" ); // India
ZonedDateTime zdt_Kolkata = odt.atZone( zoneId_Kolkata );
更多... ...
ZoneId zoneId_Montréal = ZoneId.of( "Asia/Montreal" ); // Québec Canada
ZonedDateTime zdt_Montréal = odt.atZone( zoneId_Montréal );
Instant
对于UTC,提取Instant
对象。 该Instant
类表示在时间轴上的时刻UTC ,分辨率为纳秒 。
Instant instant = zdt_Montréal.toInstant();
该java.time框架是建立在Java 8和更高版本。 这些类取代旧的麻烦日期时间类,如java.util.Date
, .Calendar
,与java.text.SimpleDateFormat
。
该乔达-时间的项目,现在在维护模式 ,建议迁移java.time。
要了解更多信息,请参阅甲骨文教程 。 和搜索堆栈溢出了很多例子和解释。
多的java.time功能后移植到Java 6和7在ThreeTen-反向移植并且还适于使用Android在ThreeTenABP 。
该ThreeTen-额外项目与其他类扩展java.time。 该项目是为将来可能增加的java.time试验场。