印度标准时间 (IST)比格林威治标准时间早5点半(5小时30分钟)。我们显示为GMT+5.5。
是否有办法找到这个值(在上面的情况下,value = 5.5)的时区?
在我的android应用程序中,我可以获得设备时区。但是如何使用设备时区获得这个值呢?
double timezoneval = 0.0;
Calendar cal = Calendar.getInstance();
cal.set(mn.Year(), mn.Month(), mn.Day(), mn.Hour(), mn.minute(),
(int) mn.second());
TimeZone tz = TimeZone.getDefault();
boolean t = tz.inDaylightTime(cal.getTime());
if (t)
timezoneval = ((TimeZone.getDefault().getRawOffset())
/ (60 * 60 * 1000D) + (TimeZone.getDefault()
.getDSTSavings() / (60 * 60 * 1000D)));
else
timezoneval = ((TimeZone.getDefault().getRawOffset()) / (60 * 60 * 1000D));
你可以试试这段代码。这将为您提供时区的值。如果你想要不同的时区值;只改变TimeZone tz = TimeZone.getDefault();
TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");
TimeZone.setDefault(tz);
检查Timezone类。原始偏移量是你想要的,以毫秒为单位。您可以轻松地将其转换为小时值。
long rawOffset = TimeZone.getDefault().getRawOffset();
看到http://developer.android.com/reference/java/util/TimeZone.html getRawOffset ()
br
如何使用设备时区获取此值
ZonedDateTime.
now(
ZoneId.systemDefault() // Or: ZoneId.of("Asia/Kolkata")
)
.getOffset()
.toString()
查看此代码运行在IdeOne.com。
+ 05:30
java.time
使用java.time
的解决方案,现代API:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
int seconds = zdt.getOffset().getTotalSeconds();
System.out.println(seconds);
// If required, convert it into hours
double hours = seconds / 3600.0;
System.out.println(hours);
}
}
输出:19800
5.5
了解更多关于java.time
,现代日期时间API*从Trail: Date Time.
*出于任何原因,如果你必须坚持Java 6或Java 7,你可以使用ThreeTen-Backport,它支持大部分 Java。time功能到Java 6 &7. 如果你正在为一个Android项目工作,你的Android API级别仍然不符合Java-8,检查Java 8+可用的API,通过desugaring和如何在Android项目中使用ThreeTenABP。
尝试:
TimeZone.getDefault();
getDefault()返回当前设备的时区详细信息。然后,您可以调用getOffset()来获取UTC与该时区之间的差值。
试试这个代码
public class Sample {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String dateStr = "2010-06-14 02:21:49-0400";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
TimeZone tz = TimeZone.getDefault();
sdf.setTimeZone(tz);
Date date = sdf.parse(dateStr);
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
String newDateStr = sdf.format(date);
System.out.println(newDateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出应该像这样
2010-06-14 08:21:49 AM
这正是我所需要的。
double rawOffset = TimeZone.getDefault().getRawOffset();
rawOffset = rawOffset / (60 * 60 * 1000);
System.out.println("rawOffset : " + rawOffset);