2013-02-08 51 views
0

我有一个日历对象,它在UTC时区。我想将日历对象中的日期和时间转换为PST,同时牢记所有的DST。我期待写一个辅助函数具有以下签名:日历对象时区转换

private Calendar getPSTTime(Calendar utcTime) 
{ 

} 
+0

有没有标题中需要说“Java编程语言”;你已经包含了一个标签,而标签系统在这里工作得很好,没有任何帮助。您可以使用标签提供的任何信息在主题中都不是必需的,您可以使用该空间来更好地描述您的问题。 (你通常应该实际上*提出一个问题*而不是仅仅指出一个目标,并且显示你在实际解决问题时已经做出了一些努力。) – 2013-02-08 23:54:05

+0

也是一个[如何使用Java处理日历时区的问题?]( http://stackoverflow.com/q/230126/62576),[将UTC时间转换为Java中的本地时区](http://stackoverflow.com/questions/3010035/converting-a-utc-time-to - 在Java本地时区)?,[从UTC日期转换为Java到PST](http://stackoverflow.com/questions/6075912/converting-date-from-utc-to-pst- in-java?rq = 1)等等。在发布问题之前,请至少进行一次基本搜索,以查看问题是否已被问及并回答。我链接的部分链接位于右侧的“相关”列表中。谢谢。 – 2013-02-08 23:57:28

+0

我确实在寻找现有的帖子。它没有帮助我。我的问题是具体的。另外,我不知道我能更好地描述这个功能。我已经给了方法签名。编写java代码的人应该明白我想要实现的目标。 – supreethmurthy 2013-02-09 00:34:56

回答

1
private Calendar getPSTTime(Calendar utcTime) 
{ 
    TimeZone americaPacific = TimeZone.getTimeZone("America/Los_Angeles"); 
    Calendar pacificTime = Calendar.getInstance(americaPacific); 
    pacificTime.setTime(utcTime.getTime()); 
    return pacificTime; 
} 

FYI:所有可用的时区字符串标识符是由法TimeZone.getAvailableIDs()返回。这就是我从"America/Los_Angeles"

+0

这是我尝试的第一件事。这样做只会设置UTC时间。它不会将时间转换为PST。谢谢。 – supreethmurthy 2013-02-09 00:36:15

+0

@ user2055876试试'TimeZone.getTimeZone(“PST”);'。此外,你是如何检查这种方法不起作用的(对我而言,它工作正常)?常见的错误是人们通过打印'calendar.getTime()'来检查它,该日历基于存储在日历中的毫秒返回'new Date(milis)',忘记'Date'使用默认语言环境。要检查日历是否正确转换,直接从它获取值,如'calendar.get(Calendar.HOUR_OF_DAY);'。 – Pshemo 2013-02-09 01:21:41

0

在Java中时间事件被存储为这个事件和1970年1月1日之间的毫秒数,00:00:00 GMT(例如,如果这些事发生在伦敦)

所以每当我们谈论的日期和时间在Java中,由java.util.Date或java.util.Calendar表示,我们总是讨论绝对编号,而不考虑时区。

时区只有在我们尝试以字符串形式输出日期/时间时才有意义。在我的头顶,我可以记得做这件事的方法有两种:

  • 使用日历,设置时区,使用GET(Calendar.XXX)方法来获得个人的日期/时间组件时区您想
  • 使用SimpleDateTimeFormat,设置时区,格式化整个日期/时间为单一字符串中的时区,你想

实在是在Java的“时区转换”没有这样的事,但时区特定的格式。

但是,如果你想使事情真的令人困惑,您可以添加“修正”到您的日历时间值,这样它会返回字段的值,如果它是在PST时区:

private Calendar getPSTTime(Calendar utcTime) 
{ 
    TimeZone pstZ = TimeZone.getTimeZone("America/Los_Angeles"); 
    long offset = pstZ.getOffset(utcTime.getTime()); 
    Calendar pacificTime = Calendar.getInstance(); 
    pacificTime.setTimeInMillis(utcTime.getTimeInMillis()-offset); 
    return pacificTime; 
}