如何在Java中获取您的时区的当前date和时间?

我有我的应用程序托pipe在伦敦服务器。 我在西class牙马德里。 所以时区是-2个小时。

我如何获得当前的date/时间与我的时区。

Date curr_date = new Date(System.currentTimeMillis()); 

例如

 Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE")); 

与乔达时间

 DateTimeZone zone = DateTimeZone.forID("Europe/Madrid"); DateTime dt = new DateTime(zone); int day = dt.getDayOfMonth(); int year = dt.getYear(); int month = dt.getMonthOfYear(); int hours = dt.getHourOfDay(); int minutes = dt.getMinuteOfHour(); 

Date 始终是基于UTC的…或时区中立,取决于您想要如何查看它。 Date只代表一个时间点; 它与时区无关,从Unix纪元开始只有几毫秒的时间。 没有“ Date本地实例”的概念。 将DateCalendar和/或TimeZone.getDefault()结合使用以使用“本地”时区。 使用TimeZone.getTimeZone("Europe/Madrid")获得马德里时区。

…或使用乔达时间 ,这往往使整个事情更清晰,国际海事组织。 在Joda Time中,您将使用DateTime值,该值是特定日历系统和时区中的即时值。

在Java 8中,您将使用java.time.ZonedDateTime ,它是Joda Time的DateTime的Java 8等效版本。

正如Jon Skeet所说, java.util.Date没有时区。 Date对象表示自1970年1月1日上午12:00,UTC以来的毫秒数。 它不包含时区信息。

将Date对象格式化为string时(例如,使用SimpleDateFormat ,可以在DateFormat对象上设置时区,让它知道您想在哪个时区显示date和时间:

 Date date = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // Use Madrid's time zone to format the date in df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid")); System.out.println("Date and time in Madrid: " + df.format(date)); 

如果您想要运行程序的计算机的本地时区,请使用:

 df.setTimeZone(TimeZone.getDefault()); 

使用日历很简单:

 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid")); Date currentDate = calendar.getTime(); 

检查这可能是有用的。 为我工作得很好。 守则还包括夏令时

  TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); Calendar cal = Calendar.getInstance(); // If needed in hours rather than milliseconds int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000)); int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000)); int dts = cal.getTimeZone().getDSTSavings(); System.out.println("Local Time Zone : " + cal.getTimeZone().getDisplayName()); System.out.println("Local Day Light Time Saving : " + dts); System.out.println("China Time : " + tz.getRawOffset()); System.out.println("Local Offset Time from GMT: " + LocalOffSethrs); System.out.println("China Offset Time from GMT: " + ChinaOffSethrs); // Adjust to GMT cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset())); // Adjust to Daylight Savings cal.add(Calendar.MILLISECOND, - cal.getTimeZone().getDSTSavings()); // Adjust to Offset cal.add(Calendar.MILLISECOND, tz.getRawOffset()); Date dt = new Date(cal.getTimeInMillis()); System.out.println("After adjusting offset Acctual China Time :" + dt); 

你会使用JodaTime 。 有关TimeZone的Java.util.Date非常有限。

用Java8 DateTime

 public static void main(String[] args) { LocalDateTime localNow = LocalDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId()); System.out.println(localNow); // Prints current time of given zone without zone information : 2016-04-28T15:41:17.611 ZonedDateTime zoneNow = ZonedDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId()); System.out.println(zoneNow); // Prints current time of given zone with zone information : 2016-04-28T15:41:17.627+02:00[Europe/Madrid] } 

我无法使用日历工作。 你必须使用DateFormat

 //Wednesday, July 20, 2011 3:54:44 PM PDT DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); df.setTimeZone(TimeZone.getTimeZone("PST")); final String dateTimeString = df.format(new Date()); //Wednesday, July 20, 2011 df = DateFormat.getDateInstance(DateFormat.FULL); df.setTimeZone(TimeZone.getTimeZone("PST")); final String dateString = df.format(new Date()); //3:54:44 PM PDT df = DateFormat.getTimeInstance(DateFormat.FULL); df.setTimeZone(Timezone.getTimeZone("PST")); final String timeString = df.format(new Date()); 

这里是一个例子:

 Calendar c = Calendar.getInstance(TimeZone.getDefault()); Date date = c.getTime(); 

以下是为您的区域查找时间的一些步骤:

现在的date=新的date();

  DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); df.setTimeZone(TimeZone.getTimeZone("Europe/London")); System.out.println("timeZone.......-->>>>>>"+df.format(now)); 
 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); df.setTimeZone(TimeZone.getTimeZone("PST")); final String dateTimeString = df.format(new Date());