我正在尝试创建一个日期对象,其时间表示不同时区的日期时间。可能吗?我试过这个。有人可以解释这里有什么问题。
d1= Thu Jan 21 17:26:20 IST 2016
dateInString= Jan 21, 2016 06:56:20 AM EST
d2= Thu Jan 21 17:26:20 IST 2016
输出:
public static void test3() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date d1 = calendar.getTime();
System.out.println("d1= " + d1);
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");
SimpleDateFormat sdf2 = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String dateInString = sdf.format(calendar.getTime());
System.out.println("dateInString= " + dateInString);
try {
Date d2 = sdf2.parse(dateInString);
System.out.println("d2= " + d2);
}
catch (ParseException e) {
e.printStackTrace();
}
}
更新
如果我不关心时区而只需要时间,我有一个Date对象,用错误的时区显示时间。使用了SDF的新实例
d1= Thu Jan 21 18:36:51 IST 2016
dateInString= Jan 21, 2016 08:06:51 AM
d2= Thu Jan 21 08:06:51 IST 2016
enter code here
输出:
childViewController
答案 0 :(得分:1)
试试这个:
Date date = Calendar.getInstance().getTime();
SimpleDateFormat sdfAmerica = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a");
sdfAmerica.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String sDateInAmerica = sdfAmerica.format(date);
答案 1 :(得分:0)
日期旨在存储UTC时间(请参阅docs)。如果您希望有时间用于其他时区并且您不想格式化,我建议您使用Calendar
个对象(请参阅docs)。
对于你作为Java 7开发人员:一般来说,我建议使用Calendar
个对象而不是Date
个对象,因为更容易操作(例如增加时间)和更直观的api。
答案 2 :(得分:0)
您可以通过以下方式解决此问题
SimpleDateFormat sdfAmerica = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a");
sdfAmerica.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date newDate = sdfAmerica.parse(sdfAmerica.format(Calendar.getInstance().getTime()));