2

我正在编写一个自定义组件,允许用户使用 JAVA SDK 从日历中选择一个日期。我想将一天设置为一周的第一天(例如星期一),然后将日历显示为一周的第一天(日历的第一列将是设置的那一天)。

在 Android 中,我们setFirstDayOfWeek(int firstDayOfWeek)在 DatePicker 中有方法可以为我们执行此操作。

DatePickerHarmony OS的上述替代方案是什么?

问候, 苏布姆

4

1 回答 1

3

目前还没有直接的api接口来实现,但是可以使用工具类代码来实现。如下所示:

public static LocalDateTime getMondayForThisWeek(LocalDate localDate) {
       LocalDateTime monday = LocalDateTime.of(localDate, LocalTime.MIN).with(DayOfWeek.MONDAY);
       return monday;
   }

参考代码:

Tool类核心代码:

public class LocalDateTimeUtil {

...

    /***

     * constructor method

     */

    private LocalDateTimeUtil() {

    }



    /**

     * Obtains the date of the Monday of the week to which the specified date belongs.
     *

     * @param localDate Time
     * @return LocalDateTime

     */

    public static LocalDateTime getMondayForThisWeek(LocalDate localDate) {

        LocalDateTime monday = LocalDateTime.of(localDate, LocalTime.MIN).with(DayOfWeek.MONDAY);

        return monday;

    }



    /**

     * Obtains the date of the Sunday of the week to which the specified date belongs.

     *

     * @param localDate Time

     * @return LocalDateTime

     */

    public static LocalDateTime getSundayForThisWeek(LocalDate localDate) {

        LocalDateTime sunday = LocalDateTime.of(localDate, LocalTime.MIN).with(DayOfWeek.SUNDAY);

        return sunday;

    }

...

}

XML文件布局:</p>

<?xml version="1.0" encoding="utf-8"?>

<DirectionalLayout

    xmlns:ohos="http://schemas.huawei.com/res/ohos"

    ohos:height="match_parent"

    ohos:width="match_parent"

    ohos:orientation="vertical"

    >

   <DatePicker

       ohos:id="$+id:data_picker"

       ohos:height="match_content"

       ohos:width="match_parent"

       ohos:background_element="#C89FDEFF"

       />

</DirectionalLayout>

代码在AbilitySlice:</p>

public class MainAbilitySlice extends AbilitySlice {

    private DatePicker datePicker;

    @Override

    public void onStart(Intent intent) {

        super.onStart(intent);

        super.setUIContent(ResourceTable.Layout_ability_main);

        initView();

    }



    private void initView() {

        if (findComponentById(ResourceTable.Id_data_picker) instanceof DatePicker) {

            datePicker = (DatePicker) findComponentById(ResourceTable.Id_data_picker);

        }

        if (datePicker != null) {

            // If you select Monday or Sunday as the first day of a week, select the corresponding method. This example selects Monday as the first day of the week

            LocalDateTime mondayForThisWeek = LocalDateTimeUtil.getMondayForThisWeek(LocalDate.now());

            datePicker.updateDate(mondayForThisWeek.getYear(), mondayForThisWeek.getMonth().getValue(), mondayForThisWeek.getDayOfMonth());

        }

    }

}
于 2021-07-30T03:38:35.393 回答