2017-06-02 51 views
0

我有一個代碼顯示GMT時間,我需要在PST中顯示它。我如何修改下面的代碼來獲取PST時間?如何在Java中將GMT更改爲PST格式?

代碼

public static final String FORMAT = "MM/dd/yyyy"; 
public static final String OUTPUT_FORMAT_STD_DATE6 = "MM/dd/yy hh:mm a"; 
public static final String INPUT_FORMAT_STD_TIMESTAMP = "yyyy-MM-dd HH:mm:ss"; 

public static String formatDate(String strDate, String inputFormat, String outputFormat) { 
    Date date = convertStringToDate(strDate,inputFormat); 
    String displayDateString = formatDate(date, outputFormat); 
    return displayDateString; 
} 

formatDate正在這裏稱爲

public void endElement(String uri, String localName, String qName) throws SAXException { 
    if(EVENT.equalsIgnoreCase(qName)) { 
     auditEntries.add(entry); 
    } else if(LOG_TIME.equalsIgnoreCase(qName)) { 
     String time = content.toString(); 
     entry.setLogTime(DateUtils.formatDate(time, "yyyy-MM-dd'T'HH:mm:ss", DateUtils.OUTPUT_FORMAT_STD_DATE6)); 
} 

請幫幫忙,我在編寫Java代碼是新型B。

這就是我所做的。

public static String formatDate(String strDate, String inputFormat, String outputFormat) { 
    Date date = convertStringToDate(strDate,inputFormat); 

    DateFormat pstFormat = new SimpleDateFormat(outputFormat); 
    pstFormat.setTimeZone(TimeZone.getDefault()); 
    String displayDateString = formatDate(date, outputFormat); 
    return displayDateString; 
} 

感謝

+0

它是否總是格林威治標準時間到PST?如果是這樣,最簡單的方法可能是直接通過減去7小時來修改'formatDate()'函數中創建的日期。 – twain249

+0

你的意思是日期 - 7? – Mike

+0

@Mike參見[this](https://stackoverflow.com/questions/35212049/how-to-convert-time-from-gmt-to-pst)鏈接,以及[this](https:// stackoverflow .com/questions/13285904/how-to-convert-pst-to-gmt-0800-in-java)鏈接。 –

回答

0

一旦你有一個Date對象,你可以將其轉換爲使用SimpleDateFormat一個timezoned字符串。下面是一個簡單的例子。

使用3個字母的時區的ID已被棄用,所以你應該使用GMT+-hour:minute格式,或類似America/Los_Angeles區域特定的字符串由@VGR

的建議爲了與JDK 1.1.x的兼容,一些三字母時區ID(例如「PST」,「CTT」,「AST」)也被支持。但是,由於多個時區經常使用相同的縮寫(例如,「CST」可能是美國「中央標準時間」和「中國標準時間」),因此它們的使用已被廢棄,並且Java平臺只能識別其中的一個他們。

編號:https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

public class DateTest { 
    public static final String OUTPUT_FORMAT_STD_DATE6 = "MM/dd/yy hh:mm a"; 

    public static void main(String[] args) { 
     Date date = new Date(); 

     String gmtDateStr = dateToTimzoneString(date, "GMT", OUTPUT_FORMAT_STD_DATE6); 
     System.out.println(gmtDateStr); 


     //3 Letter String usage is deprecated 
     String pstDateStr = dateToTimzoneString(date, "PST", OUTPUT_FORMAT_STD_DATE6); 
     System.out.println(pstDateStr); 

     //Correct way 
     pstDateStr = dateToTimzoneString(date, "GMT+5", OUTPUT_FORMAT_STD_DATE6); 
     System.out.println(pstDateStr); 
    } 

    public static String dateToTimzoneString(Date date, String timeZoneStr, String outputFormat){ 
     SimpleDateFormat sd = new SimpleDateFormat(outputFormat); 
     sd.setTimeZone(TimeZone.getTimeZone(timeZoneStr)); 
     return sd.format(date); 
    } 
} 
+0

您誤解了TimeZone文檔。三個字母的ID確實被棄用,但這並不意味着代碼應該只使用GMT±hh:mm記號。文檔指出,有很多有效的[tz數據庫](https://en.wikipedia.org/wiki/Tz_database)ID,例如「America/Los_Angeles」。 – VGR

+0

您的解決方案顯示第二天而不是當前日期。 – Mike

+0

假設你住在你所在國家的'GMT-4'國家和當前時間是'10pm'的國家,這是可能的。那麼當前的格林尼治標準時間會在第二天凌晨2點給你。 – 11thdimension

0

這是我做到了。

public static String convertUTC(String strDate, String inputFormat, String outputFormat) { 
    String displayDateString = null; 

    try { 
     DateFormat inFormat = new SimpleDateFormat(inputFormat); 
     inFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
     Date date = inFormat.parse(strDate); 

     DateFormat outFormat = new SimpleDateFormat(outputFormat); 
     outFormat.setTimeZone(TimeZone.getDefault()); 

     displayDateString = formatDate(date, outputFormat); 
    } catch (ParseException pe) { 
     pe.printStackTrace(); 
    } 

    return displayDateString; 
} 
+0

這就是我正在尋找的東西。謝謝邁克。 – 2017-06-07 15:11:24

相關問題