【问题标题】:getting local time on Android在 Android 上获取当地时间
【发布时间】:2018-01-14 06:11:54
【问题描述】:

我试过了:

TimeZone.getDefault();

我试过了:

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

我试过了:

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

无论我尝试什么...它都会给我一个默认值0 和GMT。我的应用似乎无法获取时区(它应该是 -4 或 ET,即美国东部时区)

奇怪的是……我的时钟在手机上显示的时间是正确的。 在我的 android 设备的设置中检查了“使用自动时区”。

那么为什么我不能在我的应用中获取当地时间? Android 时钟如何实现这一点,而我却不行?

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

【问题讨论】:

  • 您是在生产发布的应用程序上测试这个,还是只是在沙盒中测试您的应用程序?
  • 我正在将我的应用从 Android Studio 加载到我的手机进行测试。所以不,它不在应用商店,但仅在开发模式下......

标签: android time timezone clock


【解决方案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);

【讨论】:

  • Calendar.getInstance().getTime() 不起作用!它返回未来的日期!
【解决方案2】:

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());
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2017-07-28
    • 2013-03-24
    相关资源
    最近更新 更多