2016-09-26 32 views
2

我的数据库中有一个值,此时间格式为“上午10:40”,现在我将使用它到闹钟管理器,这是我的报警管理员代码。Android:我如何将上午和下午格式的时间转换为整数秒

Long alertTimeCatcher = new GregorianCalendar().getTimeInMillis()+10*1000; 

+10*1000 我想改变10内与我“上午10点40分”的双引号,所以我要把它转换为整数。我该怎么做?

让刚刚说我有 “11:40 AM” 我将它转换成整数

INT时间= “11:40 AM”;

这是原来的代码,然后

Long alertTimeCatcher = new GregorianCalendar().getTimeInMillis()+10*1000; 

那么这就是我需要

Long alertTimeCatcher = new GregorianCalendar().getTimeInMillis()+Time*1000; 

所以为了触发我报警经理,我需要我的时间转换为整数。

这是我到目前为止尝试过的。

try { 
     Cursor c = myDB.rawQuery("SELECT * FROM " + "tblEvents", null); 


     int Column2 = c.getColumnIndex("Date"); 
     int Column3 = c.getColumnIndex("Time"); 

     String[] arr = new String[0]; 
     // Check if our result was valid. 
     ArrayList<String> list = new ArrayList<String>(); 
     c.moveToFirst(); 
     if (c != null) { 
      // Loop through all Results 
      do { 
       String Date = c.getString(Column2); 
       String Time = c.getString(Column3); 
       Calendar ca = Calendar.getInstance(); 
       SimpleDateFormat df = new SimpleDateFormat("M/dd/yyyy"); 
       String formattedDate = df.format(ca.getTime()); 


       if (Date.equalsIgnoreCase(formattedDate)) { 
        list.add(Time); 

        Toast.makeText(getApplicationContext(), "Converter : ", Toast.LENGTH_SHORT).show(); 
       } 
      } while (c.moveToNext()); 
     } 
     Collections.reverse(list); 
    }catch(CursorIndexOutOfBoundsException e){ 
     e.printStackTrace(); 
    } 
    Long alertTimeCatcher = new GregorianCalendar().getTimeInMillis()+10*1000; 

    Toast.makeText(getApplicationContext(),alertTimeCatcher.toString(),Toast.LENGTH_SHORT).show(); 

    Intent alertIntent = new Intent(this,AlertReceiver.class); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP,alertTimeCatcher,PendingIntent.getBroadcast(this,1,alertIntent,PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

的[“HH:MM AM/PM”转换时间值来格式化使用Android]可能的复制(http://stackoverflow.com/questions/16084474/convert-time-value-to-format -hhmm-am-pm-using-android) –

回答

3

您可以使用SimpleDateFormatString转换成Date

String myStringDate = "10:40 PM" 
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa"); 
Date myDate = sdf.parse(myStringDate); 

然后以毫秒为单位获取时间和您的查询替换:

Calendar calendar = Calendar.getIstance(); 
calendar.setTime(myDate); 
int hourToSeconds = calendar.get(Calendar.HOUR_OF_DAY) * 60 * 60; 
int minutesToSeconds = calendar.get(Calendar.MINUTE) * 60; 

int totalSeconds = hourToSeconds + minutesToSeconds ; 
Long alertTimeCatcher = new GregorianCalendar().getTimeInMillis()+ totalSeconds *1000; 
+1

我stil测试你给定的代码,但到目前为止,我认为这是最好的解决方案。谢谢! –

1

快速和肮脏的:(+这是一个班轮)

String timeStr = "10:40 PM"; 

int time = (Integer.parseInt(timeStr.substring(0, timeStr.indexOf(":"))) + (timeStr.endsWith("AM") ? 0 : 12)) * 60 * 60 + 60 * Integer.parseInt(timeStr.substring(timeStr.indexOf(":") + 1, timeStr.indexOf(" "))); 

的步骤来做到这一点是很容易:

  • 了解,如果是AMPM
  • 找出那个政治家的时间和分钟T(substringindexOf会有所帮助)
  • 如果它PM添加12小时
  • 乘以小时60*60得到秒
  • Mulitply分钟与60获得秒

之后您已将时间字符串计算为整数秒


该代码格式良好且可读wi会是:

boolean isPM = timeStr.endsWith("PM"); 
int hours = Integer.parseInt(timeStr.substring(0, timeStr.indexOf(":"))); 
if (isPM) hours += 12; 
int minutes = Integer.parseInt(timeStr.substring(timeStr.indexOf(":") + 1, timeStr.indexOf(" "))); 
+0

时间格式“aa”是PM/AM –

+0

@PierGiorgioMisley是的,但我没有在这个例子中使用任何时间格式化程序 – ParkerHalo

+0

当然,但它更长更慢解决方案;) –

1

你可以使用SimpleDateFormat

SimpleDateFormat是用于以区分语言敏感的方式格式化和解析日期的具体类。它允许格式化(日期 - >文本),解析(文本 - >日期)和规范化。

String strDate = "10:40 PM" 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm aa"); 
Date date = simpleDateFormat.parse(strDate); 
相关问题