Java程序在时区之间进行转换
时间:2020-01-09 10:35:32 来源:igfitidea点击:
在本文中,我们将介绍如何在Java中的不同时区之间转换日期和时间。
这里提供了两个Java程序
1如果我们没有使用Java 8日期和时间API,请使用Calendar类进行转换。
2为此使用Java 8 Data and Time API,该类具有ZoneId和ZonedDateTime之类的类。
在此处给出的示例中,我们将来源作为印度时间(区域ID" Asia / Kolkata")
它将转换为PST(区域ID" America / Los_Angeles")
使用Java 8 API在不同时区之间转换日期和时间
该程序在不同时区之间转换日期和时间的步骤如下:
1使用java.time.ZoneId类的of()方法为两个时区创建两个Zone ID。
2为源日期时间创建ZonedDateTime实例。
3使用java.time.ZonedDateTime的withZoneSameInstant(ZoneId zone)方法,该方法返回具有不同时区的该日期时间的副本,并保留该时刻。这给出了转换后的时区中的日期时间。
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class ConvertDate {
public static void main(String[] args) {
ZoneId IndiaZone = ZoneId.of("Asia/Kolkata");
ZoneId CaliforniaZone = ZoneId.of("America/Los_Angeles");
String dateTime = "2019-10-20 10:30:45 AM";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a");
LocalDateTime ldt = LocalDateTime.parse(dateTime, dtf);
// Source ZonedDateTime
ZonedDateTime IndiaTime = ZonedDateTime.of(ldt, IndiaZone);
System.out.println("India Date-Time- " + IndiaTime);
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss a");
// Formatting as per local datetime format
System.out.println("India Date-Time(dd/MM/yyyy)- " + dtf1.format(IndiaTime));
// Get the target ZonedDateTime
ZonedDateTime CaliforniaDateTime = IndiaTime.withZoneSameInstant(CaliforniaZone);
System.out.println("California Date-time " + CaliforniaDateTime);
// Formatting as per local datetime format
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss a");
System.out.println("California Date-Time(MM/dd/yyyy)- " + dtf2.format(CaliforniaDateTime));
}
}
输出:
India Date-Time- 2019-10-20T10:30:45+05:30[Asia/Kolkata] India Date-Time(dd/MM/yyyy)- 20/10/2019 10:30:45 AM California Date-time 2019-10-19T22:00:45-07:00[America/Los_Angeles] California Date-Time(MM/dd/yyyy)- 10/19/2019 10:00:45 PM
如我们所见,两个时区之间的时差为12:30小时。印度比美国加州洛杉矶早12小时30分钟。请注意,在这些类别中考虑了日光节约,没有观察到日光节约的月份相差11小时30分钟。
使用GregorianCalendar在不同时区之间转换日期和时间
如果使用的是GregorianCalendar calendar.setTime()方法,则将精确时间设置为来源。我们也可以在输出中看到它,其中calendar1.getTime()调用显示的时间与来源相同。
确保在使用SimpleDateFormat格式化时也设置了时区,该时区也将日期时间转换为设置的时区。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class ConvertDate {
public static void main(String[] args) {
// Creating GregorianCalendar with values
GregorianCalendar calendar = new GregorianCalendar(2019, Calendar.OCTOBER, 20, 10, 30, 45);
calendar.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println("India Date-Time- " + calendar.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
// Formatting as per local datetime format
System.out.println("India Date-Time(dd/MM/yyyy)- " + sdf.format(calendar.getTime()));
GregorianCalendar calendar1 = new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"));
calendar1.setTime(calendar.getTime());
System.out.println("California Date-time " + calendar1.getTime());
SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
sdf1.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println("California Date-Time(MM/dd/yyyy)- " + sdf1.format(calendar1.getTime()));
}
}
输出:
India Date-Time- Sun Oct 20 10:30:45 IST 2019 India Date-Time(dd/MM/yyyy)- 20/10/2019 10:30:45 AM California Date-time Sun Oct 20 10:30:45 IST 2019 California Date-Time(MM/dd/yyyy)- 10/19/2019 10:00:45 PM

