You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android DatePicker返回日期改为yyMMdd格式 实现同页双选择器用于startAt检索

实现步骤

1. 修正布局文件

你当前的布局只声明了1个按钮,需要补充2个对应id的日期选择按钮:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Search">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/button_tanggal_awal"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="28dp"
        android:text="date"
        android:textSize="30sp" />

    <Button
        android:id="@+id/button_tanggal_awal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textColor="@color/black"
        android:text="选择开始日期" />

    <Button
        android:id="@+id/button_tanggal_akhir"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/button_tanggal_awal"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:textColor="@color/black"
        android:text="选择结束日期" />

</RelativeLayout>

2. 修改DatePickerFragment支持传递选择器标记

添加参数传递逻辑,区分是开始日期选择器还是结束日期选择器:

public class DatePickerFragment extends DialogFragment {
    // 标记参数key
    private static final String ARG_PICKER_TYPE = "picker_type";
    // 选择器类型常量
    public static final int TYPE_START = 0;
    public static final int TYPE_END = 1;

    // 提供实例创建方法,传递类型参数
    public static DatePickerFragment newInstance(int pickerType) {
        DatePickerFragment fragment = new DatePickerFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_PICKER_TYPE, pickerType);
        fragment.setArguments(args);
        return fragment;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        // 拿到类型参数,传给回调
        int pickerType = getArguments() != null ? getArguments().getInt(ARG_PICKER_TYPE) : TYPE_START;
        return new DatePickerDialog(getActivity(), (view, year1, month1, dayOfMonth) -> {
            DatePickerDialog.OnDateSetListener listener = (DatePickerDialog.OnDateSetListener) getActivity();
            if (listener != null) {
                // 自定义回调,把类型传过去
                listener.onDateSet(new DatePicker(getContext()) {
                    @Override
                    public int getId() {
                        return pickerType;
                    }
                }, year1, month1, dayOfMonth);
            }
        }, year, month, day);
    }
}

3. 修改Activity逻辑,处理日期格式化和双选择器区分

public class Search extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
    private Button buttontanggalawal, buttontanggalakhir;
    private TextView textView;
    // 保存格式化后的开始、结束日期,后续直接用这两个变量调用检索
    private String startDateStr, endDateStr;
    // 自定义日期格式化规则,yyMMdd对应两位年+两位月+两位日
    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd", Locale.getDefault());

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

        buttontanggalawal = findViewById(R.id.button_tanggal_awal);
        buttontanggalakhir = findViewById(R.id.button_tanggal_akhir);
        textView = findViewById(R.id.textView);

        buttontanggalawal.setOnClickListener(v -> {
            DatePickerFragment datePicker = DatePickerFragment.newInstance(DatePickerFragment.TYPE_START);
            datePicker.show(getSupportFragmentManager(), "date_picker_start");
        });

        buttontanggalakhir.setOnClickListener(v -> {
            DatePickerFragment datePicker = DatePickerFragment.newInstance(DatePickerFragment.TYPE_END);
            datePicker.show(getSupportFragmentManager(), "date_picker_end");
        });
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        // 格式化日期为yyMMdd格式
        String formattedDate = dateFormat.format(c.getTime());
        // 根据选择器类型处理
        if (view.getId() == DatePickerFragment.TYPE_START) {
            startDateStr = formattedDate;
            buttontanggalawal.setText(formattedDate);
        } else if (view.getId() == DatePickerFragment.TYPE_END) {
            endDateStr = formattedDate;
            buttontanggalakhir.setText(formattedDate);
        }
        // 两个日期都选完之后可以直接调用检索逻辑
        if (startDateStr != null && endDateStr != null) {
            // 示例:调用你的检索方法
            // query.startAt(startDateStr).endAt(endDateStr);
            textView.setText(String.format("检索区间:%s - %s", startDateStr, endDateStr));
        }
    }
}

注意事项

  • SimpleDateFormat的月份要使用大写MM,小写mm对应分钟,会出现格式错误
  • 后续调用检索方法时直接使用成员变量startDateStr和endDateStr即可

内容的提问来源于stack exchange,提问作者billy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:36:07