日期和时间转换为java中的其他时区

我已编写此代码以将当前系统日期和时间转换为其他时区。 我没有收到任何错误,但我没有按预期得到我的输出。 就像我在特定时间执行我的程序..我的输出是::

印度当前时间是:: Fri Feb 24 16:09:23 IST 2012

:: Central Standard Time中的日期和时间:: Sat Feb 25 03:39:23 IST 2012

根据CST时区的实际时间是::

 Friday, 24 February 4:39:16 am(GMT - 6:00) 

所以有一些时间差距 。 我不知道为什么会这样。 任何帮助将不胜感激..代码是::

 package MyPackage; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class Temp2 { public static void main(String[] args) { try { Calendar currentdate = Calendar.getInstance(); String strdate = null; DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); strdate = formatter.format(currentdate.getTime()); TimeZone obj = TimeZone.getTimeZone("CST"); formatter.setTimeZone(obj); //System.out.println(strdate); //System.out.println(formatter.parse(strdate)); Date theResult = formatter.parse(strdate); System.out.println("The current time in India is :: " +currentdate.getTime()); System.out.println("The date and time in :: "+ obj.getDisplayName() + "is ::" + theResult); } catch (ParseException e) { e.printStackTrace(); } } } 

这是在网络上。 可以用Google搜索。 无论如何,这里有一个版本(从这里无耻地挑选和修改):

 Calendar calendar = Calendar.getInstance(); TimeZone fromTimeZone = calendar.getTimeZone(); TimeZone toTimeZone = TimeZone.getTimeZone("CST"); calendar.setTimeZone(fromTimeZone); calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1); if (fromTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1); } calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset()); if (toTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings()); } System.out.println(calendar.getTime()); 

你的错误是调用parse而不是format

您调用parse来解析String中的Date,但在您的情况下,您有一个Date并需要使用正确的Timezone格式化它。

替换你的代码

 Calendar currentdate = Calendar.getInstance(); DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); TimeZone obj = TimeZone.getTimeZone("CST"); formatter.setTimeZone(obj); System.out.println("Local:: " +currentdate.getTime()); System.out.println("CST:: "+ formatter.format(currentdate.getTime()) 

我希望你能得到你期望的输出。

在我的日常工作中使用Java处理日期是一项非常重要的任务。 我建议你使用简化编码日的Joda-Time ,而不必“重新发明轮子”。

尝试这样的事情

 Date date = new Date(); String formatPattern = ....; SimpleDateFormat sdf = new SimpleDateFormat(formatPattern); TimeZone T1; TimeZone T2; // set the Calendar of sdf to timezone T1 sdf.setTimeZone(T1); System.out.println(sdf.format(date)); // set the Calendar of sdf to timezone T2 sdf.setTimeZone(T2); System.out.println(sdf.format(date)); // Use the 'calOfT2' instance-methods to get specific info // about the time-of-day for date 'date' in timezone T2. Calendar calOfT2 = sdf.getCalendar(); 

您可以使用“CST6CDT”,因为在某些国家/地区,他们在夏季使用CDT,在冬季使用CST

  public static String getDateInCST() { Calendar calendar = Calendar.getInstance(); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); formatter.setTimeZone(TimeZone.getTimeZone( "CST6CDT")); String strdate = formatter.format(calendar.getTime()); TimeZone.getAvailableIDs(); return strdate; } 

问题是当你打印日期obj时调用toString方法,它将在你的机器默认时区打印。 试试这个代码,看看差异。

 Calendar currentdate = Calendar.getInstance(); String strdate = null; DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz"); strdate = formatter.format(currentdate.getTime()); System.out.println("strdate=>" + strdate); TimeZone obj = TimeZone.getTimeZone("CST"); formatter.setTimeZone(obj); strdate = formatter.format(currentdate.getTime()); Date theResult = formatter.parse(strdate); System.out.println("The current time in India is :: " +currentdate.getTime()); System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + theResult); System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + strdate);