获得2个日期之间的日期安卓

时间:2014-11-12 07:17:39

标签: android

更新

警报服务未在指定日期和时间开启。

add_task_frag(触发警报的片段):

Intent intent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(getActivity(), 0, intent, 0);
AlarmManager am = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);

警报应该在5秒后继续,但它不会发生。 如果我把这个代码(用于未决意图)

PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), 0, intent, 0);

然后在按钮点击后立即报警,而不是在5秒后报警。

以下是警报接收类:

super.onCreate(savedInstanceState);
    PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Wake Lock");
    wakeLock.acquire();
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    setContentView(R.layout.alarm);

    Button stopalarm = (Button)findViewById(R.id.stop);
    stopalarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mediaPlayer.stop();
            finish();
        }
    });
    playSound (this, getAlarmUri());
}
private void playSound (Context context, Uri alert){
    mediaPlayer = new MediaPlayer();
    try{
        mediaPlayer.setDataSource(context, alert);
        final AudioManager audioManager = (AudioManager)context.getSystemService(AUDIO_SERVICE);
        if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0){
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
            mediaPlayer.prepare();
            mediaPlayer.start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
private Uri getAlarmUri(){
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    if (alert == null){
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        if (alert == null){
            RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        }
    }
    return alert;
}

@Override
protected void onStop() {
    super.onStop();
    wakeLock.release();
}

我不想要。今天的日期和用户选择的日期之间的天数。

我有一种警报类型的应用程序,用户将在特定日期设置提醒。有没有办法在用户选择的日期设置闹钟,或者我必须计算两个日期之间的天数,然后将它们转换为毫秒?

这是用户选择时间的地方:

    Calendar calender = Calendar.getInstance();
    calender.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calender.set(Calendar.MINUTE, minute);
    timePicker.setIs24HourView(false);
    SimpleDateFormat sdf = new SimpleDateFormat("hh : mm a");
    timetv.setText("@ " + sdf.format(calender.getTime()));

这是用户选择日期的地方:

    calender.set(Calendar.YEAR, year);
    calender.set(Calendar.MONTH, month);
    calender.set(Calendar.DAY_OF_MONTH, day);
    SimpleDateFormat sdf = new SimpleDateFormat("EE, d MMM yyy");
    datetv.setText("On " + sdf.format(calender.getTime()));

现在如何在此特定日期设置提醒&用户选择的时间。

3 个答案:

答案 0 :(得分:1)

尝试以下代码: -

SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";

try {
    Date date1 = myFormat.parse(inputString1);
    Date date2 = myFormat.parse(inputString2);
    long diff = date2.getTime() - date1.getTime();
    System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
    e.printStackTrace();
}

请参阅以下链接了解更多信息: -

http://www.mkyong.com/java/how-to-calculate-date-time-difference-in-java/

答案 1 :(得分:0)

如果使用一个Calendar实例而不是调用:

calendar.getTimeInMillis()

这将返回用户选择的时间(以毫秒为单位)。此外,这可用于使用AlarmManager触发警报。

答案 2 :(得分:0)

首先,您必须在必要时将它们作为字符串处理。大多数情况下,您应该使用实际描述您正在使用的数据的数据类型。

这是您的solution