从一个时区转换时间戳



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

 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打印的是当前机器的时间,而不是基于时区的时间。

不太确定您想要实现什么,但这会在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中使用的默认值当然是本地设置。

调整时区会使您从epoch起有相同的毫秒数。

使用Joda Time 2.3比java捆绑的麻烦的java.util.Date和.Calendar类要容易得多。虽然java.util.Date没有时区,但JodaTime中的DateTime对象确实知道自己分配的时区。

下面是一些示例代码。所有这些DateTime对象都表示宇宙时间线上的相同时刻,即自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

相关内容

  • 没有找到相关文章

最新更新