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