English 中文(简体)
Java, 如何将格林尼治时间改变为当地时间?
原标题:Java, How to change GMT time to local time?

服务器发送我这样的时间 :

2012-006-08 5:00:00+0100

我需要根据本地时间来更改它, 如 hH:MM 。 例如,这是日本、 印度、 美国等的时间 。

我怎样才能做到这一点?

最佳回答

<强度>备选1:使用 java.util.Date / /Calendar :

First you need to parse the value to a Date, then reformat it in the format and time zone you re interested in:

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:使用约达时间

"http://joda-time.sf.net" rel="noreferrer" >Joda time 是爪哇更好的日期/时间库。

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);

请注意, 您只有在真正需要时才应该转换为字符串表达式 。 否则, 使用基于您使用的最合适的类型 - 这是 Joda Time 真正闪耀的地方 。

问题回答

使用 JodaTime。 它比 Java s Date and Time API 更好、更安全。 有很多方法可以返回本地时间天体( HH: MM ) 。

例如,新的 DateTime( 日期时间) 到本地时间 ();

java. uttil. Date 是 UTC 的 ways 。 是什么让你认为它是本地时间? 我怀疑问题在于您通过使用本地时区或可能使用 Date. to String () 的日历实例重新显示它, 也使用本地时区 。

如果这不是问题,请张贴一些样本代码。

不过,我建议你使用Joda time , 提供更清楚的API。

其他的答案是正确的,但已经过时。使用java.time classs 。

tl;dr

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" ) );

Using java.time

定义 < a href=>" "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html" rel="nofollow"\\code >DateTimeFormatter 格式模式,以匹配输入字符串 。

String input = "2012-06-08 17:00:00 +0100";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss Z" );

OffsetDateTime

将字符串分析为 < a href=>" https://docs.oracle.com/javase/8/docs/api/java/time/ offsetDateTime.html" rel=“nofollow” code > offsetDateTime ,在您输入中代表 的对象,这意味着“比世界协调时提前一小时”。

OffsetDateTime odt = OffsetDateTime.parse( input , f ); 

ZonedDateTime

应用 来产生 < a href=> "https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html" rel="nofollow"\\code\onedDateTime 用于任何想要的时区。指定 < a href=>" https://en.wikipedia.org/wiki/liki/List_of_tz_zones_by_name" rel="nofolpol" > procepter timeze name 。 永远不要使用3-4个字母缩写, 如 /codece > 或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, 请提取一个 < code> Instant < /code > 对象 。 < a href="http://docs.oracle.com/javase/8/docs/api/java/time/Instant.html" rel="nofollow"\\ code > Instant \\\\\ a > class < a href="https://en.wikipedia.org/wiki/nanoconfours > rel="nofoldd_Universal_Timeal" rel="no follow">>> >UTC , 并有< a href="java.time java.util.Date , .Calendar , & amp; java.text.SoproDateFormat

http://www.joda.org/joda-time/"rel="no follow" >Joda-Time 项目,现载于维护模式 ,建议移民到java.time。

要了解更多信息,请查阅Oracle Toutor 。并搜索Stack Overflow, 查找许多实例和解释。

大部分java.time功能都回传到 Java 6 & amp; 7, 载于< a href="http://www. 33enten.org/ threetenbp/" rel="nol follow" > ThreeTen-Backport , 并进一步改编到< a href="https://en.wikipedia.org/wiki/Anderroid_(操作_system)" rel="nofollow" >Android , 载于

""http://www. threeten.org/ threeten-extra/" rel="nofollow" > ThreeTen-Extra project 扩展 java.time 并增加课程。 此项目是未来可能添加 java.time 的理由。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签