将String转换为hh:mm格式 [英] Convert String to hh:mm format

查看:457
本文介绍了将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格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆