簡體   English   中英

將基於 GMT/CST 的字符串轉換為 Java 中的時間戳

[英]Convert GMT/CST based string to Timestamp in java

我試圖從一個區域獲取時間,比如 IST 或任何其他時區,然后將其轉換為 GMT 時區字符串。 但是當我嘗試從基於 GMT 的字符串時間獲取時間戳時,我得到了本地時間戳值。 任何具體原因。

在網上找到了這個。

Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");

calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}

calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());

“有什么具體原因嗎?” 是的,因為 Java 假定默認情況下您要在運行 JVM 的本地時區中“打印”(渲染)日期值。

@Before
public void setup() {
    sdf = new SimpleDateFormat(Hello.TS_FORMAT);// TS_FORMAT = "yyyyMMdd'T'HHmmssXX";
    Calendar cal = sdf.getCalendar();
    cal.setTimeZone(TimeZone.getTimeZone(UTC_TIME_ZONE));// UTC_TIME_ZONE = "GMT";
    sdf.setCalendar(cal);
    ...
}

@Test
public void testTimestampFormat03() {
    String inboundTimestampText = '20170322T170805-0700';// means inbound is in Pacific Time Zone (17:08:05 on 03/22)
    Date dt = sdf.parse(inboundTimestampText);
    String defaultFormat = dt.toString();// default locale is Central Time Zone (19:08:05 on 03/22)
    String actualFormat = sdf.format(dt);
    String expectedFormat = inboundTimestampText.replace('T17', 'T00');
    expectedFormat = expectedFormat.replace('0322', '0323');// expected Time Zone is UTC (00:08:05 on 03/23) 
    expectedFormat = expectedFormat.replace('-', 'Z');
    assertEquals(expectedFormat, actualFormat + '0700');
}

您必須指定您希望日期值“呈現”的時區。基本上,您需要使用“相同”的格式化程序來打印您用來在日期字符串formatter.parse(aDtaeString)讀取的日期formatter.format(aDate) formatter.parse(aDtaeString)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM