ISTまたは他のタイムゾーンを1つのゾーンから取得しようとすると、GMT TIMEゾーンストリングに変換されます。しかし、GMTベースの文字列時間からタイムスタンプを取得しようとすると、ローカルのタイムスタンプ値が得られます。理由は何か。GMT/CSTベースの文字列をJavaのタイムスタンプに変換する
-2
A
答えて
0
"なぜそういうの?"はい、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.format(aDate)
をプリントアウトするために、「同じ」フォーマッタを使用する必要がありますformatter.parse(aDtaeString)
。
0
ウェブ上でこれが見つかりました。
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());
関連する問題
- 1. 文字列をJavaの文字列配列に変換する
- 2. jsonの文字列をJavaの文字列に変換する
- 3. ISO 8601のタイムスタンプ文字列をjava.time.OffsetDateTimeに変換する
- 4. 文字列のタイムスタンプを合計時間に変換する
- 5. mm/dd/yyyy文字列をMySQLのタイムスタンプに変換する
- 6. この文字列をタイムスタンプに変換する方法
- 7. 文字列をインパラのタイムスタンプに変換する
- 8. 文字列をjavascriptのUnixタイムスタンプに変換する方法は?
- 9. HTTP文字列のJSONオブジェクトに変換するJava文字列
- 10. Freemarker:unixタイムスタンプ文字列を日付フォーマット文字列に変換する
- 11. 変換する文字列 - Javaの
- 12. タイムスタンプ文字列をdatetimeオブジェクトに変換するには?
- 13. Apache Hive:文字列をタイムスタンプに変換するには?
- 14. 文字列タイムスタンプをjava.sql.Timestampに変換するには?
- 15. タイムスタンプを文字列(php)に変換するには?
- 16. ベース64のカラー画像文字列をグレースケール画像ベースに変換する64
- 17. 文字列をHiveのタイムスタンプに変換します
- 18. アンドロイドでタイムスタンプを文字列に変換する
- 19. Qt/C++ - 文字列タイムスタンプをuintに変換する
- 20. Logstash KVプラグイン、タイムスタンプに文字列値を変換するLogstash
- 21. タイムスタンプ文字列をdatetime形式に変換する
- 22. jQuery/javascriptでフルタイム文字列をUnixタイムスタンプに変換する
- 23. ユニークな文字列をタイムスタンプに変換する
- 24. 文字列をJavaの文字列配列に変換するには?
- 25. リストの文字列をJavaの文字列のリストに変換する
- 26. PHP:Unixのタイムスタンプに日付文字列を変換
- 27. Javaの文字列をバイト配列に変換するには?
- 28. 文字列をJavaの小文字2小文字に変換する
- 29. Java文字列replaceall最初の文字を特定の文字列の後に小文字に変換する
- 30. 文字列ベースの列挙型の変換Typescript 2.4+
ここにコードを掲載する –