エンドユーザーに、より馴染みのある12時間形式を提示したいので、is24Hourをfalseに設定したTimePickerDialogがあります。時間、分、およびAM PMインジケータが設定され、時間が返される場合、エンドユーザーがAMまたはPMを選択したかどうかをどのように識別できますか?
これは私がリスナーのために持っているものです:
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
mHour = hourOfDay;
mMinute = minute;
// mIsAM = WHERE CAN I GET THIS VALUE
}
};
hourOfDay
は常に24時間です。 _is24HourView
_をfalse
に設定してダイアログを開いた場合、ユーザーは24時間形式の時間を処理する必要はありませんが、AndroidはそれをonTimeSet()
を呼び出す24時間。
これは私のために働いた:
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String am_pm = "";
Calendar datetime = Calendar.getInstance();
datetime.set(Calendar.HOUR_OF_DAY, hourOfDay);
datetime.set(Calendar.MINUTE, minute);
if (datetime.get(Calendar.AM_PM) == Calendar.AM)
am_pm = "AM";
else if (datetime.get(Calendar.AM_PM) == Calendar.PM)
am_pm = "PM";
String strHrsToShow = (datetime.get(Calendar.HOUR) == 0) ?"12":datetime.get(Calendar.HOUR)+"";
((Button)getActivity().findViewById(R.id.btnEventStartTime)).setText( strHrsToShow+":"+datetime.get(Calendar.MINUTE)+" "+am_pm );
}
私は同じ問題に直面していました。私のアプリにはTimePickerがあり、時間を選択してボタンを押すと、選択された時間を示す画面が表示されます。選択された「時間」は正確でしたが、AM/PMの値が選択された値の反対になる場合がありました。最後に、TimePickerからの「hrs」引数に保存していたものを変更することで修正しました。
private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener()
{
@Override
public void onTimeSet(TimePicker view, int hrs, int mins)
{
hour = hrs;
minute = mins;
c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hour);
//instead of c.set(Calendar.HOUR, hour);
c.set(Calendar.MINUTE, minute);
今、次の画面に進むためにボタンを押すと、選択された正しいAM/PM値が適切に表示されました。
適切なHH:MM形式を示す、ユーザーが選択した内容を含むきちんとしたトーストメッセージ
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String AM_PM = " AM";
String mm_precede = "";
if (hourOfDay >= 12) {
AM_PM = " PM";
if (hourOfDay >=13 && hourOfDay < 24) {
hourOfDay -= 12;
}
else {
hourOfDay = 12;
}
} else if (hourOfDay == 0) {
hourOfDay = 12;
}
if (minute < 10) {
mm_precede = "0";
}
Toast.makeText(mContext, "" + hourOfDay + ":" + mm_precede + minute + AM_PM, Toast.LENGTH_SHORT).show();
}
こんにちは、次のような独自の形式を使用できます。
String myFormat = "hh:mm a"; // your own format
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
String formated_time = sdf.format(calendar_time.getTime()); //format your time
「a」はAM-PMを表すフォーマット時間のコードであることがわかりました。 http://www.tutorialspoint.com/Java/java_date_time.htm
この簡単な方法を試してください:
void openTimeFragment() {
TimePickerDialog mTimePicker;
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
mTimePicker = new TimePickerDialog(YourActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
String time = selectedHour + ":" + selectedMinute;
SimpleDateFormat fmt = new SimpleDateFormat("HH:mm");
Date date = null;
try {
date = fmt.parse(time );
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat fmtOut = new SimpleDateFormat("hh:mm aa");
String formattedTime=fmtOut.format(date);
edtTextTime.setText(formattedTime);
}
}, hour, minute, false);//No 24 hour time
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
private String getTime(int hr,int min) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,hr);
cal.set(Calendar.MINUTE,min);
Format formatter;
formatter = new SimpleDateFormat("h:mm a");
return formatter.format(cal.getTime());
}
[タイムピッカー]ダイアログボックスでAM/PMを直接設定することが期待されていた場合、回避策があります。これは、EditTextに現在の/デフォルトの時間を事前に入力した場合に機能します。 -ダイアログをインスタンス化する前に、EditTextにPM時間値がある場合、時間コンポーネントを12増やします。
sref_Time3はampm値です。 sref_Time1は時間コンポーネントです。
if (sref_Time3.equals("PM")) {
hour = hour + 12;
} else if (sref_Time1.equals("12")) {
hour = 0;
}
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
ありがとうございます。それでは、お元気で。
これを試して :
Calendar calendar = Calendar.getInstance();
calendar.set(0, 0, 0, hourOfDay, minute, 0);
long timeInMillis = calendar.getTimeInMillis();
Java.text.DateFormat dateFormatter = new SimpleDateFormat("hh:mm a");
Date date = new Date();
date.setTime(timeInMillis);
time.setText(dateFormatter.format(date));
これは私のために働く:
TimePickerDialog timePickerDialog = new TimePickerDialog(AddFocusActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.HOUR,hourOfDay);
time = calendar.get(Calendar.HOUR)
+ ((calendar.get(Calendar.AM_PM) == Calendar.AM) ? "am" : "pm");
Log.e("time",time);
}
},calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), false);
あなたは私の解決策を試すことができます、私は"hh:mm a"フォーマットを使用して設定しましたAM/PM時間:
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.ENGLISH);
String formattedTime = formatter.format(myCalendar.getTime());
EditText.setText(formattedTime);
public static class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.set(0, 0, 0, hourOfDay, minute);
textView.setText((String) DateFormat.format("hh:mm aaa", calendar));
}
}
//For showing the dialog put below two lines where you want to call
TimePickerFragment timePickerFragment = new TimePickerFragment();
timePickerFragment.show(getSupportFragmentManager(), "TimePicker");
private TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
boolean isPM = (hourOfDay >= 12);
tvTime.setText(String.format("%02d:%02d %s", (hourOfDay == 12 || hourOfDay == 0) ? 12 : hourOfDay % 12, minute, isPM ? "PM" : "AM"));
}
};
これを試して、それがあなたを助けることを願っています
int mHour;
int mMin;
StringBuilder stringBuilder = new StringBuilder();
TimePickerDialog timePickerDialog = new TimePickerDialog(context, new
TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMin = minute;
String am_pm ;
Calendar datetime = Calendar.getInstance();
datetime.set(Calendar.HOUR_OF_DAY, hourOfDay);
datetime.set(Calendar.MINUTE, minute);
am_pm = getTime(mHour,mMin);
stringBuilder.append(" ");
stringBuilder.append(am_pm);
editTextDate.setText(stringBuilder);
}
}, mHour, mMin, false);
timePickerDialog.show();
public String getTime(int hr, int min) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,hr);
cal.set(Calendar.MINUTE,min);
Format formatter;
formatter = new SimpleDateFormat("h:mm a");
return formatter.format(cal.getTime());
}
このアプローチは既存のフォーマット機能を使用し、am/pmと24hフォーマットの間の決定は、timePickerDialog
が24時間サポート付きで開かれたかどうかに基づいています。 Kotlinの例。
val timePickerDialog = TimePickerDialog(
requireContext(), TimePickerDialog.OnTimeSetListener { timePicker, hourOfDay, minutes ->
val datetime = Calendar.getInstance()
datetime.set(Calendar.HOUR_OF_DAY, hourOfDay)
datetime.set(Calendar.MINUTE, minutes)
val timeFormatAmPm = SimpleDateFormat("hh:mm aa")
val timeFormat24Hours = SimpleDateFormat("HH:mm")
timeEditTextView.setText(
when (timePicker.is24HourView) {
true -> timeFormat24Hours.format(datetime.time)
false -> timeFormatAmPm.format(datetime.time)
}
)
},
currentHour, currentMinute, is24HourFormat
)
BRマティアス
TimeDialogを使用して時間を取得し、EditTextに設定しているときに、「分」が0未満の場合(例:12:05)、12:5のようになることがわかりました。このコードでは、この問題を解決し、TimeDialogを適切に使用して、12時間形式が必要な場合にAM/PMを取得しています。 onTimeSet()を次のものに置き換えます
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
String period;
int hour = 0;
String minute;
if(selectedMinute >= 0 && selectedMinute < 10)
minute = "0" + selectedMinute;
else
minute = String.valueOf(selectedMinute);
if(selectedHour >= 0 && selectedHour < 12)
period = "AM";
else
period = "PM";
if(period.equals("AM")){
if(selectedHour == 0)
hour = 12;
else if(selectedHour >= 1 && selectedHour < 12)
hour = selectedHour;
}else if(period.equals("PM")){
if(selectedHour == 12)
hour = 12;
else if(selectedHour >= 13 && selectedHour <= 23)
hour = selectedHour - 12;
}
String time = hour+":"+minute+" "+period;
currentText.setText(time);
}
}, hour, minute, false);
答えるには遅すぎて、完璧な答えがすでに選択されていることはわかっていますが、初心者にはあまり明確ではないと思ったので、答えを投稿
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
Calendar mcurrentTime = Calendar.getInstance();
int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
int minute = mcurrentTime.get(Calendar.MINUTE);
TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
String AM_PM;
if (selectedHour >=0 && selectedHour < 12){
AM_PM = "AM";
} else {
AM_PM = "PM";
}
editText.setText( selectedHour + ":" + selectedMinute+" "+AM_PM);
}
}, hour, minute, false);
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
});