【问题标题】:How to Custom date format in android Date Picker如何在 android Date Picker 中自定义日期格式
【发布时间】:2016-12-02 05:39:46
【问题描述】:

我正在尝试使用自定义格式(如 dd-MMM-yyyy(10-aug-1982))从日期选择器对话框中捕获日期。我使用了以下代码,但只接受整数值作为月份而不是字符串。请查看我想要从日期选择器发送到编辑文本的注释代码。

请任何人指导我如何将月份作为字符串返回。在此先感谢。以下是我的代码。

XML

    <EditText
        android:id="@+id/date"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:background="#d4d4d4"
        android:inputType="none"
        android:textIsSelectable="true"
        android:hint="Select Date..."
        android:padding="15dp"
        android:textColor="#897"
        android:textColorHint="#090"
        android:textSize="20sp"
        android:textStyle="bold" />
</RelativeLayout>

代码

 package com.example.raufabid.mycalendar;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;

    import android.app.DatePickerDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.DatePicker;
    import android.widget.EditText;

    import java.text.SimpleDateFormat;
    import java.util.Calendar;

    public class MainActivity extends AppCompatActivity {

        EditText date;
        DatePickerDialog datePickerDialog;

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


            date = (EditText) findViewById(R.id.date);
            date.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {

                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR); // current year
                    int mMonth = c.get(Calendar.MONTH); // current month
    //                SimpleDateFormat mMonth = new SimpleDateFormat("MMM");
    //                String Month_name = mMonth.format(c);

                    int mDay = c.get(Calendar.DAY_OF_MONTH); // current day


                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(MainActivity.this,
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    // set day of month , month and year value in the edit text
                                    date.setText(dayOfMonth + "/"
                                            + (monthOfYear + 1) + "/" + year);

                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();
                }
            });

        }
    }

编辑:

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

        // initiate the date picker and a button
        date = (EditText) findViewById(R.id.date);
        bbc = (EditText) findViewById(R.id.editText2);
        // perform click event on edit text
        date.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // calender class's instance and get current date , month and year from calender
                final Calendar c = Calendar.getInstance();
                int mYear = c.get(Calendar.YEAR); // current year

                try {
                    c.setTime(new SimpleDateFormat("MMM").parse("July"));
                    int mMonth = c.get(Calendar.MONTH) + 1;
                    //String mMonth = c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
                    int mDay = c.get(Calendar.DAY_OF_MONTH); // current day

                    // SimpleDateFormat mMonth = new SimpleDateFormat("MMM");
                    // String Month_name = mMonth.format(c);

                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(MainActivity.this,
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    // set day of month , month and year value in the edit text
                                    date.setText(dayOfMonth + "/"
                                            + (monthOfYear + 1) + "/" + year);

                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();

                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        });

    }
}

【问题讨论】:

  • 试试这个c.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());然后你会得到Jan
  • 或者这个c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); for January
  • 感谢您的回复。当我将月份转换为字符串参数时,OnDateSet 方法仅获取三个整数作为参数,它开始给出错误。请看这段代码 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)。请指导。
  • 好的。您想将字符串月份名称转换为整数值并作为参数传递。对吗?

标签: android-studio


【解决方案1】:

改为如下

// date picker dialog
datePickerDialog = new DatePickerDialog(MainActivity.this,
        new DatePickerDialog.OnDateSetListener() {
          @Override
             public void onDateSet(DatePicker view, int year,
                                           int monthOfYear, int dayOfMonth){
                                Calendar calendar = Calendar.getInstance();
                                calendar.set(year, monthOfYear, dayOfMonth);
                                SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");
                                String dateString = format.format(calendar.getTime());
                                date.setText(dateString);
                            }
                        }, mYear, mMonth, mDay);

【讨论】:

  • 抱歉回复晚了,正忙于其他任务,但是当我运行你的代码并测试它时,我感觉在空中飞翔。谢谢你摇滚...
【解决方案2】:

使用“EEEE dd”代替“dd”来获取当天的名称。 比如 2019 年 10 月 25 日星期五。

            // date picker dialog
            datePickerDialog = new DatePickerDialog(MainActivity.this,
                    new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth)
                        {
                            Calendar calendar = Calendar.getInstance();
                            c.set(year , monthOfYear , dayOfMonth);
                            SimpleDateFormat format = new SimpleDateFormat("EEEE dd-MMM-yyyy");
                            String datestring=format.format(calendar.getTime());
                            editText.setText(datestring);
                        }
                    }, mYear, mMonth, mDay);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2018-10-05
    • 2018-04-27
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多