Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个时区转换时间戳_Java_Datetime - Fatal编程技术网

Java 从一个时区转换时间戳

Java 从一个时区转换时间戳,java,datetime,Java,Datetime,我需要将时间戳从一个时区转换到另一个时区,并检索该时区的时间(以毫秒为单位)。 我试着在下面做,但没有成功 SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); localDateFormat.setTimeZone(TimeZone.getTimeZone("anothertimezone)); //Current Date Time in Loc

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

 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());

日历.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中使用的默认设置是本地设置。

调整时区后,您将获得与之相同的毫秒数

使用2.3比与java捆绑的众所周知的麻烦的java.util.Date和.Calendar类容易得多。虽然java.util.Date没有时区,但Joda time中的对象确实知道自己指定的时区

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

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() );
当运行时

输入:2014-01-02T03:04:05
巴黎时间:2014-01-02T03:04:05.000+01:00
巴黎时间:13886284500
日期时间UTC:2014-01-02T02:04:05.000Z
日期时间UTC毫秒:13886284500
日期时间:2014-01-01T21:04:05.000-05:00
dateTimeMontréal millis:13886284500

如果你调整时区,你仍然会有相同的毫秒数,因为epoch。你好,巴兹尔,我不太明白你的意思。我想时间戳是一样的吗?不同区域中的日期时间是相同的different@oxygenan纽约股市上午9:30开市。在华盛顿州的瓦拉瓦拉,人们需要在早上6:30(比纽约时间晚三个小时)在电脑上观看市场。从纽约时区调整到瓦拉-瓦拉时区意味着调整3小时。纽约的人和瓦拉瓦拉的人都在同一时间看着市场开盘。纽约的9点30分和瓦拉瓦拉的6点30分都是宇宙历史上的同一时刻,并且都是从新纪元(1970年初)开始以相同的毫秒数表示的。