单击按钮时,我想从Android手机获取时区。
单击按钮时,我想从Android手机获取时区。
Answers:
您是否尝试过使用TimeZone.getDefault()
:
大多数应用程序将使用TimeZone.getDefault(),它根据程序运行的时区返回TimeZone。
参考:http : //developer.android.com/reference/java/util/TimeZone.html
DateTimeZone.forTimeZone(TimeZone.getDefault());
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());
输出:
时区GMT + 09:30时区ID ::澳大利亚/达尔文
编辑:更正情况
我需要的补偿不仅包括日光节约时间,而且还包括数字。如果有人在寻找示例,这是我使用的代码。
我得到的响应是“ 3.5”(3:30'),这是我冬天在伊朗德黑兰的期望,夏天是“ 4.5”(4:30')。
我还需要它作为字符串,因此我可以将其发布到服务器,因此您可能不需要最后一行。
获取当前时区:
TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double number
double offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);
试试这个代码-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
它将返回用户选择的时区。
Calendar
为此创建对象是胡说八道。此类对象的创建非常昂贵。TimeZone.getDefault()
是获取此信息的合适方法。
具有简单日期格式的最简单解决方案: SimpleDateFormat(“ ZZZZZ”):
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
Locale.getDefault());
Date currentLocalTime = calendar.getTime();
DateFormat date = new SimpleDateFormat("ZZZZZ",Locale.getDefault());
String localTime = date.format(currentLocalTime);
System.out.println(localTime+ " TimeZone " );
==>输出为:+05:30
根据http://developer.android.com/reference/android/text/format/Time.html,您应该使用Time.getCurrentTimezone()检索设备的当前时区。
现代答案:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
当我在澳大利亚/悉尼时区运行此代码段时,输出的确切内容是:
Australia/Sydney
如果您想了解夏令时(DST)的时区名称或缩写:
DateTimeFormatter longTimeZoneFormatter = DateTimeFormatter.ofPattern("zzzz", Locale.getDefault());
String longTz = ZonedDateTime.now(zone).format(longTimeZoneFormatter);
System.out.println(longTz);
DateTimeFormatter shortTimeZoneFormatter = DateTimeFormatter.ofPattern("zzz", Locale.getDefault());
String shortTz = ZonedDateTime.now(zone).format(shortTimeZoneFormatter);
System.out.println(shortTz);
Eastern Summer Time (New South Wales) EST
TimeZone
其他大多数答案中使用的班级是我们在2011年提出问题时所拥有的课程,即使该课程设计不良。今天,它早已过时,我建议我们改用2014年推出的现代Java日期和时间API java.time。
java.time在旧的和更新的Android设备上均可正常运行。它至少需要Java 6。
org.threeten.bp
带有子包的日期和时间类。java.time
首先在此处进行了描述。java.time
Java 6和7的反向移植(JSR-310的ThreeTen)。对于具有API 26或更高版本的设备,可以这样获得:
ZonedDateTime.now().getZone().toString();