Android System.currentTimeMillis()返回错误的日期

Android System.currentTimeMillis()返回错误的日期,android,time,timestamp,sharedpreferences,unix-timestamp,Android,Time,Timestamp,Sharedpreferences,Unix Timestamp,我正试图将当前时间保存到共享的首选项中,但由于某些原因,当前时间的数量是荒谬的,在遥远的未来一年47486 我已经检查了设备本身的日期设置,那里的日期是正确的,我在任何地方都找不到这样的问题。我希望这里有人能帮助我 问题就在这里: public static void setLastSyncSucceeded(final Context context) { SharedPreferences sp = PreferenceManager.getDefaultSharedPrefere

我正试图将当前时间保存到共享的首选项中,但由于某些原因,当前时间的数量是荒谬的,在遥远的未来一年
47486

我已经检查了设备本身的日期设置,那里的日期是正确的,我在任何地方都找不到这样的问题。我希望这里有人能帮助我

问题就在这里:

public static void setLastSyncSucceeded(final Context context) {
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
     long currentTime = System.currentTimeMillis();
     sp.edit().putLong(PREF_LAST_SYNC_SUCCEEDED, currentTime).commit();
}

所以基本上,当我在调试时,我注意到
currentTime
1436374427923
,这是
Tue,11月23日47486 00:38:43 GMT

你的值是毫秒(如
currentTimeMillis
),你把它当作秒来处理


将其除以1000(即,将其转换为秒),您将得到更合理的值
Wed,08 Jul 2015 16:53:47 GMT

您在那里得到的值是毫秒(如
currentTimeMillis
),您将其视为秒

System.currentTimeMillis() 将其除以1000(即,将其转换为秒),您将得到更合理的值
Wed,08 Jul 2015 16:53:47 GMT

System.currentTimeMillis()返回自1970-01-01 00:00:00 UTC以来的毫秒数

System.currentTimeMillis() UTC是世界上通用的时间标准。它也被认为是格林威治标准时间(格林威治标准时间)——不完全一样

因此,如果您处于不同的时区,则应考虑这一点。

System.currentTimeMillis()返回自UTC 1970-01-01 00:00:00以来的毫秒数

UTC是世界上通用的时间标准。它也被认为是格林威治标准时间(格林威治标准时间)——不完全一样


因此,如果您处于不同的时区,那么您应该考虑到这一点。

如果您希望从当前毫秒获取格式化的日期,则可以执行以下操作:

long yourmilliseconds = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm"); //Play with the parameters to get different results
Date resultdate = new Date(yourmilliseconds);
String formattedActualDate = sdf.format(resultdate);
或者很容易:

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm");
String formattedActualDate = sdf.format(new Date());
最后:

public static void setLastSyncSucceeded(final Context context) {
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
     long currentTime = System.currentTimeMillis();
     sp.edit().putLong(PREF_LAST_SYNC_SUCCEEDED, formattedActualDate).commit();
}

如果要从当前毫秒数获取格式化日期,则可以执行以下操作:

long yourmilliseconds = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm"); //Play with the parameters to get different results
Date resultdate = new Date(yourmilliseconds);
String formattedActualDate = sdf.format(resultdate);
或者很容易:

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm");
String formattedActualDate = sdf.format(new Date());
最后:

public static void setLastSyncSucceeded(final Context context) {
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
     long currentTime = System.currentTimeMillis();
     sp.edit().putLong(PREF_LAST_SYNC_SUCCEEDED, formattedActualDate).commit();
}

请参见,问题是关于年份的,而不是时区的。@BasilBourque您是否尝试将1436374427923转换为有效日期和时间。很明显,47486是op的错误。我们不知道他是如何试图转换为日期的。问题是关于年份
47486
,而不是时区。@BasilBourque您是否尝试过将1436374427923转换为日期?它是有效的日期和时间。显然,47486是op的错误。我们不知道他是如何试图转换为日期的。谢谢你,这是问题所在。我没有注意到我用来转换时间的网站是从秒转换而不是毫秒。谢谢你,这是问题所在,我没有注意到我用来转换时间的网站是从秒转换而来的秒而不是毫秒