我需要将时间戳从一个时区转换为另一个时区,并检索该时区的时间(以毫秒为单位)。 我尝试在下面这样做,但它没有成功。
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
正在打印当前机器的时间而不是基于时区的时间。
答案 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的链接。 还链接到Gist和Github Repo。