本文介绍了将String转换为hh:mm格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在制作一个我以这种格式获取字符串的应用程序
I am making an application in which i am geting a string in this format
2014-11-17 13:41:25
但是我想要的只是这个
13:41
我尝试这样做,但是我得到了强制关闭
I tried doin this but i got forcse close
String test = new SimpleDateFormat("kk:mm").format(data.getStringExtra("TIME"));
etStartTime.setText(test);
LogCat:
11-17 14:44:07.717: E/AndroidRuntime(14287): FATAL EXCEPTION: main
11-17 14:44:07.717: E/AndroidRuntime(14287): java.lang.IllegalArgumentException: Bad class: class java.lang.String
11-17 14:44:07.717: E/AndroidRuntime(14287): at java.text.DateFormat.format(DateFormat.java:359)
11-17 14:44:07.717: E/AndroidRuntime(14287): at java.text.Format.format(Format.java:93)
11-17 14:44:07.717: E/AndroidRuntime(14287): at com.megasys.im3_new.workorder.TimeCard.onActivityResult(TimeCard.java:318)
11-17 14:44:07.717: E/AndroidRuntime(14287): at com.megasys.im3_new.workorder.TimeCard$TimePickerFragment.onTimeSet(TimeCard.java:383)
11-17 14:44:07.717: E/AndroidRuntime(14287): at android.app.TimePickerDialog.tryNotifyTimeSet(TimePickerDialog.java:130)
11-17 14:44:07.717: E/AndroidRuntime(14287): at android.app.TimePickerDialog.onClick(TimePickerDialog.java:115)
11-17 14:44:07.717: E/AndroidRuntime(14287): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169)
11-17 14:44:07.717: E/AndroidRuntime(14287): at android.os.Handler.dispatchMessage(Handler.java:107)
11-17 14:44:07.717: E/AndroidRuntime(14287): at android.os.Looper.loop(Looper.java:194)
11-17 14:44:07.717: E/AndroidRuntime(14287): at android.app.ActivityThread.main(ActivityThread.java:5370)
11-17 14:44:07.717: E/AndroidRuntime(14287): at java.lang.reflect.Method.invokeNative(Native Method)
11-17 14:44:07.717: E/AndroidRuntime(14287): at java.lang.reflect.Method.invoke(Method.java:525)
11-17 14:44:07.717: E/AndroidRuntime(14287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
11-17 14:44:07.717: E/AndroidRuntime(14287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
11-17 14:44:07.717: E/AndroidRuntime(14287): at dalvik.system.NativeStart.main(Native Method)
我做了什么
try {
String time = data.getStringExtra("TIME");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date timeCompare;
timeCompare = sdf.parse(time);
Date currentTime = new Date();
int comareResult = timeCompare.compareTo(currentTime);
if (comareResult == -1) {
// time = new SimpleDateFormat("HH:mm").format(time);
Date testDate = null;
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-mm-dd HH:MM");
try {
testDate = sdf.parse(time);
} catch(Exception ex) {
ex.printStackTrace();
}
etStartTime.setText("" + testDate);
}
} catch(Exception ex) {
ex.printStackTrace();
}
这是我所做的,但仍然会出错。
This is what i had done ,but still am getting errors.
我从意图中得到的时间
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
public int hour;
public int min;
public String time;
Calendar c;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
min = c.get(Calendar.MINUTE);
// Create a new instance of DatePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, min, true);
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar date = Calendar.getInstance();
date.set(Calendar.HOUR_OF_DAY, hourOfDay);
date.set(Calendar.MINUTE, minute);
date.set(Calendar.AM_PM, date.get(Calendar.AM_PM));
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date.getTime());
Intent intent = new Intent();
intent.putExtra("TIME", time);
getTargetFragment().onActivityResult(getTargetRequestCode(), 1, intent);
getDialog().hide();
}
public String onTimeSelected() {
return time;
}
}
推荐答案
我不明白您为什么要格式化日期,因为已经有小时和分钟。
I didn't understand why you're formatting the date as you are already having hour and minutes.
您只需要使用它来获取24小时TimeFormat
You just need to use this for getting 24 hour TimeFormat
String time = new SimpleDateFormat("HH:mm").format(mCalendar.getTime());
在将数据发送回活动时,可以使用 Handler
尝试以下代码
While to send data back to the activity you can use Handler
Try with Following code
FragmentActivity
MainActivity.java:
@SuppressLint("HandlerLeak")
public class MainActivity extends FragmentActivity {
private int mHour = 0;
private int mMinute = 0;
/** This handles the message send from TimePickerDialogFragment on setting Time */
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message m) {
Bundle b = m.getData();
mHour = b.getInt("set_hour");
mMinute = b.getInt("set_minute");
Toast.makeText(getBaseContext(), b.getString("set_time"), Toast.LENGTH_SHORT).show();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/** Getting an instance of Set button */
Button btnSet = (Button) findViewById(R.id.btnSet);
/** Setting click event listener for the button */
btnSet.setOnClickListener(listener);
}
/** Click Event Handler for button */
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
Bundle b = new Bundle();
Calendar mCalendar = Calendar.getInstance();
b.putInt("set_hour", mCalendar.get(Calendar.HOUR_OF_DAY));
b.putInt("set_minute", mCalendar.get(Calendar.MINUTE));
TimePickerDialogFragment timePicker = new TimePickerDialogFragment(mHandler);
timePicker.setArguments(b);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(timePicker, "time_picker");
ft.commit();
}
};
}
TimePickerDialogFragment.java:
public class TimePickerDialogFragment extends DialogFragment {
private Handler mHandler;
private int mHour;
private int mMinute;
public TimePickerDialogFragment(Handler h) {
mHandler = h;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle b = getArguments();
mHour = b.getInt("set_hour");
mMinute = b.getInt("set_minute");
TimePickerDialog.OnTimeSetListener listener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMinute = minute;
Calendar mCalendar = Calendar.getInstance();
mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
mCalendar.set(Calendar.MINUTE, minute);
String time = new SimpleDateFormat("HH:mm").format(mCalendar.getTime());
Bundle b = new Bundle();
b.putString("set_time", "Set Time : " + time);
Message m = new Message();
m.setData(b);
mHandler.sendMessage(m);
}
};
return new TimePickerDialog(getActivity(), listener, mHour, mMinute, false);
}
}
这篇关于将String转换为hh:mm格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!