如何使用时区偏移将日期转换为时间?

时间:2013-11-12 12:01:41

标签: java date

如何使用DateHH:mm+-GMT打印成格式SimpleDateFormat

"EEE, d MMM yyyy HH:mm:ss Z"    Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"                 010704120856-0700

我怎么能打印:13:01-7以上的例子?那么,用最短的可能值表示时区偏移量?

4 个答案:

答案 0 :(得分:2)

如果您使用的是Java 7,则可以使用X标志来获取时区。

Java 7 SimpleDateFormat javadoc:

  

X时区ISO 8601时区-08; -0800; -08:00

答案 1 :(得分:1)

尝试以下:

import java.util.Date;
import java.text.SimpleDateFormat;

class array05{
  public static void main(String[] args){
      SimpleDateFormat sf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
      System.out.println(sf.format(new Date()));
  }
}

对我而言,它一直在打印Вт, 12 ноя 2013 14:22:24 +0200

答案 2 :(得分:0)

了解计算机时间的工作原理非常重要。有了这个说我同意,如果创建一个API来帮助您像实时一样处理计算机时间,那么它应该以允许您像实时一样对待它的方式工作。在大多数情况下,情况确实存在,但有一些重要的疏忽需要引起注意。

无论如何我离题!如果您有UTC偏移(最好在UTC中工作而不是GMT偏移),您可以计算时间(以毫秒为单位)并将其添加到时间戳。请注意,SQL时间戳可能与Java时间戳不同,因为计算时间的过程并不总是相同的 - 这取决于数据库技术和操作系统。

我建议您使用System.currentTimeMillis()作为时间戳,因为这些可以在java中更一致地处理,而不必担心将SQL时间戳转换为Java Date对象等。

要计算偏移量,您可以尝试以下方法:

Long gmtTime =1317951113613L; // 2.32pm NZDT
Long timezoneAlteredTime = 0L;

if (offset != 0L) {
    int multiplier = (offset*60)*(60*1000);
    timezoneAlteredTime = gmtTime + multiplier;
} else {
    timezoneAlteredTime = gmtTime;
}

Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(timezoneAlteredTime);

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");

formatter.setCalendar(calendar);
formatter.setTimeZone(TimeZone.getTimeZone(timeZone));

String newZealandTime = formatter.format(calendar.getTime());

我希望这有用!

答案 3 :(得分:-1)

试试这个,如你所引用的那样最短,

long millis = new Date().getTime();
System.out.println(SimpleDateFormat.getTimeInstance(SimpleDateFormat.SHORT).format(millis));