2016-09-17 98 views
0

我正在創建一個應用程序來提醒用戶即將到來的約會。我們只需說
用戶預約將在21:9:2016。因此,在任命兩天前警報會開始通知他 目前我知道如何在特定時間設置鬧鐘,但不知道如何設置從1日期到另一日期的鬧鐘。 這是我設定特定日期的鬧鐘的代碼。用於獲取日,小時,月,年的日期時間確定安排鬧鐘的日期和時間

public String getDayofTheMonth(String datetime) { 
    db = this.DataBase.getReadableDatabase(); 


    String selectQuery = "select strftime('%d','" + datetime + "') as result"; 
    Cursor c = db.rawQuery(selectQuery, null); 
    if (c.moveToFirst()) { 
     return c.getString(c.getColumnIndex("result")); 
    } 
    return ""; 
} 


public String getSecondFromDateTime(String datetime) { 
    db = this.DataBase.getReadableDatabase(); 


    String selectQuery = "select strftime('%S','" + datetime + "') as result"; 
    Cursor c = db.rawQuery(selectQuery, null); 
    if (c.moveToFirst()) { 
     return c.getString(c.getColumnIndex("result")); 
    } 
    return ""; 
} 

public String getMinuteFromDateTime(String datetime) { 
    db = this.DataBase.getReadableDatabase(); 


    String selectQuery = "select strftime('%M','" + datetime + "') as result"; 
    Cursor c = db.rawQuery(selectQuery, null); 
    if (c.moveToFirst()) { 
     return c.getString(c.getColumnIndex("result")); 
    } 
    return ""; 
} 

功能從未來的日期歌廳過去的日期

public static void setUpAlarm(Context context, String time, String appointment_id) { 

    int month = Integer.valueOf(DataBaseManager.getInstance(context).getMonthFromDateTime(time)); 
    int year = Integer.valueOf(DataBaseManager.getInstance(context).getYearFromDateTime(time)); 
    int day = Integer.valueOf(DataBaseManager.getInstance(context).getDayofTheMonth(time)); 
    int hour = Integer.valueOf(DataBaseManager.getInstance(context).getHourFromDateTime(time)); 
    int min = Integer.valueOf(DataBaseManager.getInstance(context).getMinuteFromDateTime(time)); 
     int sec =0; 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.clear(); 
     calendar.set(year, --month, day, hour, min, 0); 
     long sdl = calendar.getTimeInMillis(); 



     AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, AlarmReciver.class); 
     intent.putExtra("service_id", appointment_id); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, Integer.valueOf(alarmCode), intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
    } 

// DB函數

public List<String> getPastDatesFromSpecificDate(String noOfDays, String datetime) { 
    db = this.Database.getReadableDatabase(); 
    List<String> dateslist = new ArrayList<>(); 
    for (int i = -1; i < Integer.valueOf(datetime); i++) { 
     String selectQuery = "SELECT date('" + datetime + "','-" + i + " day') as datetime; "; 
     Cursor c = db.rawQuery(selectQuery, null); 
     if (c.moveToFirst()) { 
      Log.d("past_dates",c.getString(c.getColumnIndex("datetime"))); 
      dateslist.add(c.getString(c.getColumnIndex("datetime"))); 
     } 
    } 

    return dateslist; 
} 

誰能幫助我?

回答

0

你可以像這樣得到以前的日期。

private String getYesterdayDateString() { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.DATE, -1); 
     return dateFormat.format(cal.getTime()); 
    } 
+0

你能告訴我如何使用報警管理器以上特定任務嗎? –

0

問題

聽起來像是你想每天都在同一時間的日設置循環鬧鈴。爲了設置鬧鐘,你顯然需要自1970年以UTC開始的時間以來的毫秒數。

如果你的問題不是這個,你應該編輯問題的更多信息,因爲它沒有寫得很清楚。

java.time

您使用的是現在由java.time類過時的麻煩舊的遺留日期時間類。許多java.time功能被移植到ThreeTen-Backport項目中的Java 6 & 7中,並且在ThreeTenABP項目中進一步適用於Android。使用LocalTime類來表示每天的鬧鐘時間。

LocalTime alarmTime = LocalTime.of(6 , 0 , 0); 

獲取當前日期。全球範圍內所需的時區並不相同。

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(z); 

設置明天的鬧鐘。

LocalDate tomorrow = today.plusDays(1); 

將這三部分組合在一起創建一個代表時間線上特定時刻的對象ZonedDateTime

ZonedDateTime zdt = 
    ZonedDateTime.of(tomorrow , alarmTime , z); 

提取自時間以來的毫秒數。我們可以從Instant得到,即UTC時間線上的一分鐘,分辨率爲納秒。

long millisecondsSinceEpoch = 
    zdt.toInstant() 
     .toEpochMilli() ; 
相關問題