【问题标题】:Convert Date from PST to MST TimeZone将日期从 PST 转换为 MST 时区
【发布时间】:2015-11-25 16:06:18
【问题描述】:

我想将格式为MM/dd/yyyy HH:mmPST 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;

标签: java date


【解决方案1】:

如果您可以使用新的 Java 时间 API,您的代码可能会简单得多:

String input = "08/31/2015 19:50";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm")

LocalDateTime ldt = LocalDateTime.parse(input, fmt);
ZonedDateTime pst = ZonedDateTime.of(ldt, ZoneId.of("America/Los_Angeles"));
ZonedDateTime mst = pst.withZoneSameInstant(ZoneId.of("America/Denver"));

【讨论】:

  • 感谢您的回复!这就是我要找的,但ZonedDateTimeJava8 功能。你能帮忙Java7
  • @09Q71AO534 不幸的是,我多年来没有使用过旧的日期 API(在 Java 7 中我使用了 joda time)...
  • 感谢您的回复。我已经尝试了7中的代码,请评论代码:P
【解决方案2】:

我在Java1.7 中尝试了以下代码,以下代码仅是从 PST 到 MST 转换的一部分。 :P

public static Date convertPstToMst(String dateInString){
          Date mstDate = null;

          // Set Default TimeZone as PST    
          SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm");
          sdf.setTimeZone(TimeZone.getTimeZone(PST_TIMEZONE));

          try { 
                Calendar pstCal = Calendar.getInstance(TimeZone.getTimeZone(PST_TIMEZONE));
                pstCal.setTime(sdf.parse(dateInString));

                    String pstTime = ((pstCal.get(Calendar.MONTH)+1)+"/"+pstCal.get(Calendar.DATE)+"/"+pstCal.get(Calendar.YEAR)+" "+pstCal.get(Calendar.HOUR_OF_DAY)+":"+pstCal.get(Calendar.MINUTE));
                    System.out.println(pstTime);

                    pstCal.setTimeZone(TimeZone.getTimeZone(MST_TIMEZONE));
                    String mstTime = ((pstCal.get(Calendar.MONTH)+1)+"/"+pstCal.get(Calendar.DATE)+"/"+pstCal.get(Calendar.YEAR)+" "+pstCal.get(Calendar.HOUR_OF_DAY)+":"+pstCal.get(Calendar.MINUTE));
                    System.out.println(mstTime);
                    // Converting String to Date
                    mstDate = convertStringToDate(mstTime);

            } catch (ParseException e) {
                e.printStackTrace();
            }
          return mstDate;
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 2012-12-01
    • 2021-06-12
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多