印度标准时间(IST) 比格林威治标准时间早 5:30 小时(5 小时 30 分钟)。我们将其显示为 GMT+5.5。
有没有办法按时区找到这个值(在上述情况下,值 = 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);
它会为你工作。
检查时区类。原始偏移量是您想要的,以毫秒为单位。您可以轻松地将其转换为以小时为单位的价值。
long rawOffset = TimeZone.getDefault().getRawOffset();
请参阅http://developer.android.com/reference/java/util/TimeZone.html#getRawOffset()
如何使用设备时区获取此值
ZonedDateTime.
now(
ZoneId.systemDefault() // Or: ZoneId.of("Asia/Kolkata")
)
.getOffset()
.toString()
+05:30
使用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
从Trail: Date Time了解更多关于java.time
现代日期时间 API *的信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和您的 Android API 工作level 仍然不符合 Java-8,请通过 deugaring和How to use ThreeTenABP in Android Project检查 Java 8+ APIs 。
试试这个代码
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
这实际上是我需要的。
double rawOffset = TimeZone.getDefault().getRawOffset();
rawOffset = rawOffset / (60 * 60 * 1000);
System.out.println("rawOffset : " + rawOffset);