【发布时间】:2015-11-25 16:06:18
【问题描述】:
我想将格式为MM/dd/yyyy HH:mm 的PST Time 转换为MST Time。
我尝试过的代码如下。目前我在IST Time Zone 并使用JDK1.7。
下面的代码产生输出This is the Code Test : 08/31/2015 07:20 MST
我怀疑它是否真的是 MST!因为这里的MST Time 显示为20:50,所以我教过它,考虑到上午/下午(12 小时)时钟,它应该显示为8:50。
这让我很困惑——我想知道出了什么问题?
/**
*
* Read a Date in the Format of MM/dd/yyyy HH:mm which is a (PST) Time Zone.
* Convert it to MST Time Zone and Save.
*
* Step 1 : Set Timezone as PST to Date in format of MM/dd/yyyy HH:mm,
* Step 2 : Convert PST to MST Time,
* Step 3 : Convert MST Time to Date in format of MM/dd/yyyy HH:mm.
*
* Eg: PST Time Now -> 08/31/2015 19:50;
* MST Time Now -> 08/31/2015 20:50;
*
*
*/
package dates;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class DateUtilities {
public static void main(String[] args) {
String dateInString = "08/31/2015 19:50";
System.out.println("This is the Code Test"+MstTimeNow(step1(StringToDate(dateInString))));
// step2(step1(StringToDate(dateInString)));
}
// String To Date
public static Date StringToDate(String dateInString) {
Date date = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm");
date = sdf.parse(dateInString);
// System.out.println("String To Date "+date);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
// To Set TimeZone as PST
public static Calendar step1(Date date) {
Calendar cal = Calendar.getInstance();
TimeZone tz = TimeZone.getTimeZone("PST");
cal.setTimeZone(tz);
cal.setTime(date);
// System.out.println("Get Calendar PST Time: "+cal.getTime() +" TimeZone "+cal.getTimeZone());
return cal;
}
// Calendar To MST Time
public static String MstTimeNow(Calendar cal) {
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
formatter.setCalendar(cal);
formatter.setTimeZone(TimeZone.getTimeZone("MST"));
String mstTimeString = formatter.format(cal.getTime());
// System.out.println("MST time Now is : "+mstTimeString);
return mstTimeString;
}
}
assylias 给出的Solution 产生低于预期的输出!
Input String : 08/31/2015 19:50
Local Date Time: 2015-08-31T19:50
Zoned Date Time PST: 2015-08-31T19:50-07:00[America/Los_Angeles]
Zoned Date Time MST: 2015-08-31T20:50-06:00[America/Denver]
【问题讨论】:
-
我希望我上面的代码应该返回我在
Eg中描述的时间 -
你的问题是什么?已发布的数百个类似问题和答案如何尚未解决您的问题?
-
提示:切勿使用 3-4 个字母的时区代码。使用proper time zone names。
-
@BasilBourque 我已经对我的问题是什么进行了简要编辑并请告知上述链接中的哪个 TimeZone 意味着 PST / MST 我在区域方面非常糟糕。
-
我会试试这个
America/Los_Angeles - Pacific Time; America/Denver - Mountain Time;