1

Im creating an alarm apps for android. I dont really understand about time format so i go googling and got this post.

I followed that post, but a bug still remains : My apps cant tell the difference between (lets say) 12:17 AM and 12:17 PM. So the bug will occurred if the hour is 12.

What i did when taking the value form the TimePicker (hh:m:aa) format :

    String hour = "";
    Calendar datetime = Calendar.getInstance();
    datetime.set(Calendar.HOUR_OF_DAY,  timeSchedule.getCurrentHour());
    datetime.set(Calendar.MINUTE, timeSchedule.getCurrentMinute());

    if (datetime.get(Calendar.AM_PM) == Calendar.AM && timeSchedule.getCurrentHour() == 0) //12 AM = 0
        hour = "00"+ ":" + timeSchedule.getCurrentMinute();
    else
        hour = timeSchedule.getCurrentHour() + ":" + timeSchedule.getCurrentMinute();

With above code, 12:17 AM will become 00:17 while 12:17PM will become 12:17PM. This value is stored in the mysql Time format. Since i want to create an alarm apps, please kindly tell me whether i did is right or not.

And this is what i did to show them to the user, where 00:17 (taken from the result of above code) become 12:17AM (correct) but 12:17 become 12:17AM (wrong) :

    String time = getItem(position).getTime(); //value from above code
    SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
    SimpleDateFormat newFormat = new SimpleDateFormat("hh:mm:aa");
    String formatedTime = "";
    try {
        Date date = format.parse(time);
        formatedTime = newFormat.format(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

To be honest, this is the first time i deal with somekind of alarm app, so please kindly tell me if i do something wrong. (beside my bug)

Thanks for your time.

UPDATE

This is what i did now :

I changed the mysql column from Time to Varchar, because Time wont let me insert "AM/PM".

After that :

    String hour = "";
    Calendar datetime = Calendar.getInstance();
    datetime.set(Calendar.HOUR_OF_DAY,  timeSchedule.getCurrentHour());
    datetime.set(Calendar.MINUTE, timeSchedule.getCurrentMinute());

    String am_pm = "";
    if (datetime.get(Calendar.AM_PM) == Calendar.AM)
         am_pm = "AM";
    else
         am_pm = "PM";

    hour = (datetime.get(Calendar.HOUR) == 0) ?"12":datetime.get(Calendar.HOUR)+"";
final String time = hour+ ":" + datetime.get(Calendar.MINUTE) + " " + am_pm ;

Above code return 12:17 AM and 12:17 PM. With this, i dont have to use SimpleDateFormat to re-format the date again. Is this the correct way to set the time for alarm?

Community
  • 1
  • 1
Blaze Tama
  • 10,828
  • 13
  • 69
  • 129

1 Answers1

1

I am a bit confused with the notation you want to use. There are two approaches for representing AM, PM hours. Either in the range of 0:00-11:59 or in the range 1:00-12:59. You do not use either, thus you get troubles in representing the hours you encounter. PLease read through the different options provided in SimpleDateFormat.

Also restrain from using your own conversition - use the sdk class everywhere, thus you will ensure you do not get into made up format.

Boris Strandjev
  • 46,145
  • 15
  • 108
  • 135
  • Thanks for your help. I read the doc you gave, but (sorry) i dont really understand how to implement it. Do you mean i cant do something like hour = "00"+ ":" + timeSchedule.getCurrentMinute(); ? – Blaze Tama Oct 24 '14 at 09:16
  • @BlazeTama Nope I would rather use one single `SimpleDateFormat` to prepare the `String` - do not calculate it yourself. – Boris Strandjev Oct 24 '14 at 13:34