印度标准时间(IST)是格林威治标准时间之前的5:30小时(5小时30分钟)。我们将其显示为GMT + 5.5。
有没有办法按时区找到这个值(在上面的情况下,值= 5.5)?
在我的Android应用程序中,我可以获得设备时区。但如何使用设备时区获取此值?
答案 0 :(得分:2)
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);
它适用于你。
答案 1 :(得分:1)
检查Timezone类。原始偏移量是您想要的,以毫秒为单位。您可以轻松地将其转换为小时值。
long rawOffset = TimeZone.getDefault().getRawOffset();
请参阅http://developer.android.com/reference/java/util/TimeZone.html#getRawOffset()
答案 2 :(得分:1)
如何使用设备时区获取此值
ZonedDateTime.
now(
ZoneId.systemDefault() // Or: ZoneId.of("Asia/Kolkata")
)
.getOffset()
.toString()
看到这个code run live at IdeOne.com。
<块引用>+05:30
使用现代 API java.time
的解决方案:
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
从 modern date-time API 中详细了解 java.time
,Trail: Date Time*。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。
答案 3 :(得分:0)
答案 4 :(得分:0)
试试这段代码
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
答案 5 :(得分:-1)
这实际上就是我所需要的。
double rawOffset = TimeZone.getDefault().getRawOffset();
rawOffset = rawOffset / (60 * 60 * 1000);
System.out.println("rawOffset : " + rawOffset);