如何将日历对象中的时间拆分为小时和分钟以传入 Bundle?

How do I split time in a calendar object into hours and minutes to pass in a Bundle?

我正在尝试将日历对象中的小时和分钟传递给 TimePickerFragment。 Android Studio 在 "tcal.set..." 行给我以下错误消息:"Must be one of CALENDAR:...HOUR_OF_DAY, MINUTE..." 我在 Bundle 中有 "HOUR_OF_DAY and MINUTE" 的 get() 语句。关于我为什么会收到此错误以及如何解决的任何想法?

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));    

根据 docs

public void set(int field, int value)

将字段设置为给定值。

例如

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

据我所知,您没有传递有效的第一个参数、字段,因此也没有传递错误。

这与设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 值的 3 个参数不同。

因此,如果您使用

calender.set(2000, 1, 30)

,它将年设置为 2000,月设置为一月,日设置为 30 日。

但是calender.set(int field, int value) 有不同的用途。如果你这样做

calender.set(Calendar.YEAR, 1997); 

它会将年份设置为 1997。因此,这两种方法除了参数不同外,工作方式也不同。我希望你现在明白了:)