从一个时区转换时间戳

时间:2014-04-19 06:08:48

标签: java datetime

我需要将时间戳从一个时区转换为另一个时区,并检索该时区的时间(以毫秒为单位)。 我尝试在下面这样做,但它没有成功。

 SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          localDateFormat.setTimeZone(TimeZone.getTimeZone("anothertimezone));
          //Current Date Time in Local Timezone
          System.out.println("Current Date and Time in local timezone: " + localDateFormat.format( new Date()));
          Calendar calendar = localDateFormat.getCalendar();    
          System.out.println(calendar.getTime());

calendar.gettime正在打印当前机器的时间而不是基于时区的时间。

3 个答案:

答案 0 :(得分:0)

不太确定你想要实现的目标,但这会在CEST和IST中打印当前时间:

SimpleDateFormat localDateFormat = 
      new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
System.out.println("Current Date/Time in local timezone: " + 
                       localDateFormat.format( new Date()));
localDateFormat.setTimeZone(TimeZone.getTimeZone("IST"));
System.out.println("Current Date/Time in IST timezone: " + 
                       localDateFormat.format( new Date()));

您还可以以字符串形式获取日期和时间并解析它:

 // create a string showing date and time in IST time zone 
 String istDateString = localDateFormat.format( new Date());
 Date istDate = localDateFormat.parse( istDateString, new ParsePosition(0) );
 System.out.println( istDateString + " parsed to " + istDate );

Date.toString中使用的默认值当然是本地设置。

答案 1 :(得分:0)

epoch开始,调整时区会留下相同的毫秒数。

使用Joda-Time 2.3比与Java捆绑的臭名昭着的java.util.Date和.Calendar类要容易得多。虽然java.util.Date没有时区,但Joda-Time中的DateTime对象确实知道自己指定的时区。

以下是一些示例代码。所有这些DateTime对象都表示Universe时间轴中的相同时刻,即自Unix纪元(1970年初)以来的毫秒数。要进行验证,请调用getMillis方法以提取毫秒数。

String inputRaw = "2014-01-02 03:04:05";
String input = inputRaw.replace( " ", "T" ); // Convert to strict version of ISO 8601 standard format.
DateTimeZone timeZoneParis = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTimeParis = new DateTime( input, timeZoneParis ); // Interpret that string as being in a particular time zone.
DateTime dateTimeUtc = dateTimeParis.withZone( DateTimeZone.UTC );
DateTime dateTimeMontréal = dateTimeParis.withZone( DateTimeZone.forID( "America/Montreal" ) );

转储到控制台...

System.out.println( "input: " + input );
System.out.println( "dateTimeParis: " + dateTimeParis );
System.out.println( "dateTimeParis millis: " + dateTimeParis.getMillis() );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeUtc millis: " + dateTimeUtc.getMillis() );
System.out.println( "dateTimeMontréal: " + dateTimeMontréal );
System.out.println( "dateTimeMontréal millis: " + dateTimeMontréal.getMillis() );

跑步时......

input: 2014-01-02T03:04:05
dateTimeParis: 2014-01-02T03:04:05.000+01:00
dateTimeParis millis: 1388628245000
dateTimeUtc: 2014-01-02T02:04:05.000Z
dateTimeUtc millis: 1388628245000
dateTimeMontréal: 2014-01-01T21:04:05.000-05:00
dateTimeMontréal millis: 1388628245000

答案 2 :(得分:0)

我编写了一个实用工具类,用于将Java时间戳从一个时区转换为另一个所需的时区时间戳。 这是我的帖子Java Timestamp Timezone Conversion - Reference Code的链接。 还链接到GistGithub Repo