在Android上获取当地时间

时间:2017-08-07 01:58:51

标签: android time timezone clock

我试过了:

TimeZone.getDefault();

我试过了:

Calendar mCalendar = new GregorianCalendar();
TimeZone mTimeZone = mCalendar.getTimeZone();

我试过了:

Calendar c = Calendar.getInstance();
mTimeZone = c.getTimeZone();

无论我尝试什么...它都默认为0GMT。我的应用似乎无法获得时区(应该是-4ET,即美国东部时区)

奇怪的是......我的时钟在手机上显示正确的时间。 "使用自动时区"在我的Android设备的设置中检查。

那为什么我不能在我的应用中获得当地时间? Android时钟如何能够实现这一目标而不是我?

我在网上查了一下,似乎找不到任何东西。是否至少有一种与时钟应用程序同步的方式,并且还可以在我的应用程序上显示它的时间?有没有办法在我的应用上获得正确的时间?

2 个答案:

答案 0 :(得分:1)

您可以尝试:

import java.util.Calendar    
Date currentTime = Calendar.getInstance().getTime();

String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

答案 1 :(得分:0)

System.getMilliseconds() 返回自纪元以来的时间,该时间仅用作使用 GMT 的区域的当前时间。 (只要你使用的不是它自己的转换) 要获取自纪元以来的本地时间(以毫秒为单位),您可以使用此函数:

// Kotlin
fun getLocalTime(): Long
{
    val currentDate = Calendar.getInstance()
    return currentDate.timeInMillis + TimeZone.getDefault().getOffset(currentDate.timeInMillis)
}

在 Java 中可能看起来像这样:

// Java
static long getLocalTime()
{
    Calendar currentDate = Calendar.getInstance();
    return currentDate.getTimeInMillis() + TimeZone.getDefault().getOffset(currentDate.getTimeInMillis());
}

该函数获取自纪元以来的时间,并将手机本地时区的时区偏移量添加到其中。