2013-09-05 49 views
0

大家好, 我上有一个闹钟应用程序工作。当用户设置闹钟时,应用程序应该告诉用户闹钟响了多久。麻烦与转换毫秒到小时和分钟

我正在使用simpleDateFormater将毫秒转换为正确的格式。警报在设定的时间内正确地熄灭,但在格式化的时间内,我总是得到额外的11个小时。

例如。如果现在的时间是凌晨1点,我将闹钟设置为凌晨1点10分。我收到消息说警报设置为11小时10分钟,而不是10分钟。警报在上午1点10分正确地熄灭。

我附上相关的代码,让我知道如果你需要看到更多的代码。

long current = System.currentTimeMillis(); 
long time_left = set_time-current; // set_time is the time the alarm should go off , and it is set else where in the activity. 
String datePattern = "h ' hours and' mm ' minutes'"; 
SimpleDateFormat formatter = new SimpleDateFormat(datePattern); 
String timeLeft_string = formatter.format(time_left); 
Toast.makeText(getBaseContext(), "Alarm set for"+timeLeft_string, Toast.LENGTH_SHORT).show(); 


Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 

intent.putExtra("id", mRowId); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), mRowId_int, intent, 0); 
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, set_time, pendingIntent); 

这里是我的问题:1。 这里是来自11个小时? 2.我该如何摆脱它?

感谢您花时间阅读本文,并感谢您提供的任何帮助。

+0

我在毫秒工作中遇到了很多麻烦,我总是发现在Android中纳秒更可靠。你有没有尝试过使用System.nanoTime()而不是System.currentTimeMillis()? –

回答

1

只是为了扩大对乔恩斯基特的回答,set_time - current是不是一个真正的日期,至少不是语义。所以,即使你可以得到SimpleDateFormat的工作,这是误导。

约达时间是一个不错的选择,但如果你不是真的打算做更多的时间比操纵上述你,我只是做了一点分和改装:

final long MILLIS_PER_SECOND = 1000; 
final long SECONDS_PER_HOUR = 3600; 
final long SECONDS_PER_MINUTE = 60; 

long deltaSeconds = time_left/MILLIS_PER_SECOND; 
long deltaHours = deltaSeconds/SECONDS_PER_HOUR; 
long leftoverSeconds = deltaSeconds % SECONDS_PER_HOUR; 
long deltaMinutes = leftoverSeconds/SECONDS_PER_MINUTE; 

Toast.makeText(getBaseContext(), 
     String.format(Locale.US, "Alarm set for %d hours and %d minutes", deltaHours, deltaMinutes), 
     Toast.LENGTH_SHORT).show(); 
+0

谢谢你......那是有效的。 – DrkStr

4

我怀疑问题是您正在格式化本地时区。您基本上是在1970年1月1日UTC创建一个日期,然后使用您的默认时区格式化时间。

个人而言,我不会用SimpleDateFormat的一切都在这里 - 我可能会使用Joda Time,并格式化此为DurationPeriod,因为这是你真正想要代表。

如果要使用SimpleDateFormat,你可能需要使用H(24小时制),而不是h,以及时区设置为UTC。

+0

感谢那个工作的人。 – DrkStr

相关问题