如何将时区标识符转换为相应的3位数字符串? 例如“Europe/London”=>“GMT”Java:将“Europe/London”转换为3位数时区
回答
请参阅java.util.TimeZone
中的String getDisplayName(boolean daylight,int style)
方法。样式可以是TimeZone.LONG
或TimeZone.SHORT
,短样式返回时区的短名称。
更长卷绕的方法是检查String[] TimeZone.getAvailableIDs(int offset)
输出。短时区代码可能是不明确的或多余的,所以也许你可能想更深入的了解吧:
TimeZone tz = TimeZone.getTimeZone("Europe/London");
for (String s : TimeZone.getAvailableIDs(tz.getOffset(System.currentTimeMillis()))) {
System.out.print(s + ",");
}
------------------------------------------------------
Africa/Abidjan,Africa/Accra,Africa/Bamako,Africa/Banjul,Africa/Bissau,
Africa/Casablanca,Africa/Conakry,Africa/Dakar,Africa/El_Aaiun,Africa/Freetown,
Africa/Lome,Africa/Monrovia,Africa/Nouakchott,Africa/Ouagadougou,Africa/Sao_Tome,
Africa/Timbuktu,America/Danmarkshavn,Atlantic/Canary,Atlantic/Faeroe,
Atlantic/Faroe,Atlantic/Madeira,Atlantic/Reykjavik,Atlantic/St_Helena,
Eire,Etc/GMT,Etc/GMT+0,Etc/GMT-0,Etc/GMT0,Etc/Greenwich,Etc/UCT,
Etc/UTC,Etc/Universal,Etc/Zulu,Europe/Belfast,
Europe/Dublin,Europe/Guernsey,Europe/Isle_of_Man,Europe/Jersey,Europe/Lisbon,
Europe/London,GB,GB-Eire,GMT,GMT0,Greenwich,Iceland,Portugal,UCT,UTC,
Universal,WET,Zulu,
您可以使用下面的代码来找到任何时区3位数的缩写。
Date date = new Date();
String TimeZoneIds[] = TimeZone.getAvailableIDs();
String timezoneShortName = "";
String timezoneLongName = "Europe/London";
for (int i = 0; i < TimeZoneIds.length; i++) {
TimeZone tz = TimeZone.getTimeZone(TimeZoneIds[i]);
String tzName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT);
if(timezoneLongName.equals(TimeZoneIds[i])){
timezoneShortName = tzName;
break;
}
}
System.out.println(timezoneShortName);
虽然这里的问题是,当你这样做:'日期日期=新的日期();',这是应用你在任何设备的时区。所以当你执行'tz.inDaylightTime(date)'时,这只是确定你当前的设备是否在夏令时,而不是在夏季时间是否在**“Europe/London “**。例如,如果我在纽约的PC上运行此代码并将我的PC时区设置为EDT,那么此代码将确定纽约的DST状态,而不是“欧洲/伦敦”......有关如何解决这个问题!?! – johnvdenley 2013-01-13 14:38:35
@johnvdenley'Date'表示一个绝对时间点(自时代起,内部为毫秒),所以这不是问题。换句话说,如果我在波士顿调用'new Date()',我的朋友在同一时刻在伦敦调用'new Date()',我们的'Date'对象将具有相同的基础时间戳。 – augurar 2016-04-18 19:52:51
当然,但这不是我想解决的问题。我的问题是日期存储在服务器上(UTC),但当同一日期在客户端PC上提供时,则客户端PC正在应用本地时区,如果您需要相对时间,这很好。然而,这里是我的产品的用例:周五下午4点,我在伦敦预约了一次头发预约,周一我去了纽约,我忘记了预约的时间,因此我登录系统并在星期五晚上9点告诉我它!或者,服务器发送给我一个文本告诉我约会是在晚上8点(因为服务器是UTC) – johnvdenley 2016-10-10 20:33:40
- 1. 将9位数字转换为3位3位数字
- 2. Java时区转换
- 3. Java转换时区
- 4. 将Scala缓冲区转换为Java ArrayList
- 5. 将时间戳转换为时区
- 6. 将C++位模式转换为Java
- 7. 如何将24位整数转换为3字节数组?
- 8. 如何将NSString数字转换为3位数百分比值?
- 9. php将datetime转换为unixtime和时区
- 10. 将3位数字输入转换为日期格式
- 11. 将字符串转换为GMT时区日期。 JAVA
- 12. 在Java ME中将“America/Los Angeles”时区转换为“PST”或“PDT”
- 13. Java:使用时区变量将字符串转换为日期
- 14. 在Android中运行时转换时将SVG转换为位图
- 15. 将Varchar 3转换为int
- 16. 将数组转换为百分位数
- 17. 将模型转换为数组mvc 3
- 18. 将64位窗口号码转换为时间Java
- 19. 如何在javascript中将时区与时区转换为UTC
- 20. 如何将窗口时区转换为时区pytz理解?
- 21. 按时区id将jquery日期转换为自定义时区
- 22. JavaScript:将5.5时区的上午8点转换为UTC时区?
- 23. 将GMT时区转换为用户特定时区
- 24. 将时区转换为其他时区php
- 25. 用PigLatin将“3”转换为3
- 26. Java将浮点数转换为整数
- 27. 在Java中将float转换为时间?
- 28. 将当前时间转换为WebKit/Chrome 17位数时间戳
- 29. 将整数数组转换为char数组,每个整数每3位数
- 30. 将16位整数转换为0..100
如果伦敦夏令时, “欧洲/伦敦”!= “GMT” – 2010-02-03 19:15:29
没错@ThorbjørnRavnAndersen。这将是BST – dirtyhandsphp 2012-07-31 13:09:19