当我创建一个新的Date对象时,它被初始化为当前时间,但使用的是本地时区。如何在GMT中获取当前日期和时间?
发布于 2008-11-21 13:04:32
java.util.Date没有特定的时区,尽管它的值通常被认为是与协调世界时有关的。是什么让你觉得是当地时间?
准确地说:java.util.Date中的值是自Unix纪元以来的毫秒数,该纪元发生在协调世界时1970年1月1日午夜。同样的时期也可以在其他时区描述,但传统的描述是以UTC为单位的。由于距离固定纪元已有几毫秒,因此java.util.Date中的值在世界各地的任何特定时刻都是相同的,而与本地时区无关。
我怀疑问题在于您正在通过使用本地时区的Calendar实例,或者可能使用也使用本地时区的Date.toString(),或者默认情况下也使用本地时区的SimpleDateFormat实例来显示它。
如果这不是问题所在,请发布一些示例代码。
不过,我还是建议您使用Joda-Time,它提供了更清晰的应用程序接口。
发布于 2010-03-27 15:08:23
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
//Local time zone   
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );发布于 2011-07-15 02:06:20
这肯定会返回UTC time:作为String和Date对象!
static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static Date getUTCdatetimeAsDate() {
    // note: doesn't check for null
    return stringDateToDate(getUTCdatetimeAsString());
}
public static String getUTCdatetimeAsString() {
    final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    final String utcTime = sdf.format(new Date());
    return utcTime;
}
public static Date stringDateToDate(String StrDate) {
    Date dateToReturn = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
    try {
        dateToReturn = (Date)dateFormat.parse(StrDate);
    }
    catch (ParseException e) {
        e.printStackTrace();
    }
    return dateToReturn;
}https://stackoverflow.com/questions/308683
复制相似问题