2017-06-02 58 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