Как разделить время в объекте календаря на часы и минуты, чтобы пройти в Bundle?

Я пытаюсь передать часы и минуты в объекте календаря в TimePickerFragment. Android Studio выдает мне следующее сообщение об ошибке в строке "tcal.set...": "Должен быть один из CALENDAR:... HOUR_OF_DAY, MINUTE..." У меня есть операторы get() для "HOUR_OF_DAY и MINUTE" в комплекте. Любые идеи о том, почему я получаю эту ошибку и как исправить?

public class CardViewActivity extends AppCompatActivity {
   private EditText gEditText;

   @Override
    protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);

    gEditText = (EditText) findViewById(R.id.GEditText);
    }
    ...  
    Calendar tcal = Calendar.getInstance();
    String timeStr = gEditText.getText().toString().replace(" ", "");
    String[]timeParts = timeStr.split(":");
    **tcal.set(Integer.parseInt(timeParts[0]),Integer.parseInt(timeParts[1]));**
    Bundle timebundle = new Bundle();
    timebundle.putInt("hour", tcal.get(Calendar.HOUR_OF_DAY));
    timebundle.putInt("minute", tcal.get(Calendar.MINUTE));

Это отлично сработало для разделения года, месяца и дня для DatePicker:

Calendar c = Calendar.getInstance();
String dateStr = fListenerEditText.getText().toString().replace(" ","");
String[]dateParts = dateStr.split("/");
c.set(Integer.parseInt(dateParts[2]),Integer.parseInt(dateParts[0])-1,Integer.parseInt(dateParts[1]));
Bundle argsbundle = new Bundle();
argsbundle.putInt("year", c.get(Calendar.YEAR));
argsbundle.putInt("month", c.get(Calendar.MONTH));
argsbundle.putInt("day", c.get(Calendar.DAY_OF_MONTH));    

person AJW    schedule 03.10.2015    source источник


Ответы (1)


Согласно документы,

public void set(int field, int value)

устанавливает поле в заданное значение.

eg.

calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 29);
calendar.set(Calendar.SECOND, 22);
calender.set(Calendar.YEAR, 1997);

Насколько я вижу, вы не передаете правильный первый аргумент, поле и, следовательно, ошибку.

Это отличается от варианта с 3 аргументами, который устанавливает значения для полей календаря YEAR, MONTH и DAY_OF_MONTH.

Таким образом, если вы используете

calender.set(2000, 1, 30)

, он установит год на 2000, месяц на январь и день на 30-е число.

Но calender.set(int field, int value) имеет другое применение. Если вы сделаете

calender.set(Calendar.YEAR, 1997); 

Будет установлен год 1997. Таким образом, два метода, за исключением разных аргументов, работают по-разному. Я надеюсь, что вы поняли это сейчас :)

person varunkr    schedule 03.10.2015
comment
Интересно, что ранее я настроил объект календаря для года, месяца и дня_месяца и отлично работал без значения int... см. выше редактирование. Есть предположения? - person AJW; 03.10.2015
comment
Если вы посмотрите на документы, там есть три функции .set. Но тот, у которого два аргумента, работает не так, как два других. См. это docs.oracle.com/javase/6/docs/api/java/util/ - person varunkr; 04.10.2015
comment
Также, если ответ развеял ваши сомнения, пожалуйста, примите его :) - person varunkr; 04.10.2015
comment
Я не понимаю разницы между тремя функциями .set. Разве приведенный ниже код не работает так же, как мой код Year, Month и Day_Of_Month? публичный окончательный недействительный набор (год, месяц, дата, час дня, минута) - person AJW; 04.10.2015
comment
Итак, я пытаюсь разделить текущее время объекта Calednar на две части. Первая часть — поместить час в TimePicker, а вторая часть — поместить минуты в TimePicker. Это то, что мне нужно: tcal.set(HOUR, Integer.parseInt(timeParts[0]), MINUTE, Integer.parseInt(timeParts[1])); ? - person AJW; 04.10.2015
comment
Нет, это будет иметь вид cal.set(int,int,int,int) такой функции нет. Вы должны сделать это в два этапа. tcal.set(Calender.HOUR, Integer.parseInt...), а затем tcal.set(Calender.MINUTE, Integer.parseInt...). - person varunkr; 04.10.2015
comment
Итак, поскольку мне не нужны день, месяц и год, мне нужно установить в два этапа, и для этого нужно использовать два имени поля, а не просто int. Правильный? - person AJW; 04.10.2015
comment
Да, Calender.HOUR и Calender.MINUTE — это поля, и поэтому вы должны использовать одни и те же термины для установки значений. - person varunkr; 04.10.2015
comment
Хорошо, я думаю, что понял... спасибо, что остаетесь со мной, я новичок в Java и Android. Принято и проголосовано. - person AJW; 04.10.2015
comment
Ничего страшного, я тоже когда-то был новичком :) - person varunkr; 04.10.2015