fat*_*164 4 java android-calendar java-time localdate
\n我想用这两个数字选择器更改月份和年份,但我不知道如何更改日期。我想要做的是:当我单击 BottomSheetDialog 上的“确定”按钮时,我想设置月份和年份。你能帮我吗?我尝试过,但在互联网上找不到任何解决方案。如果您帮助我,我将不胜感激。谢谢。
\npublic class PlannerFragment extends Fragment implements CalendarAdapter.OnItemListener{\n\nprivate TextView monthYearTextView;\nprivate TextView monthYearPickerOKTextView;\nprivate ImageView nextMonthImageView, previousMonthImageView;\nprivate RecyclerView calendarRecyclerView;\nprivate LocalDate selectedDate; /// tekrar buna bak\xc4\xb1lacak\nprivate NumberPicker monthNumberPicker, yearNumberPicker;\n\n@Override\npublic View onCreateView(LayoutInflater inflater, ViewGroup container,\n Bundle savedInstanceState) {\n getActivity().setTitle("Planner");\n View v = inflater.inflate(R.layout.fragment_planner, container, false);\n\n previousMonthImageView = v.findViewById(R.id.previous_month_image_view);\n nextMonthImageView = v.findViewById(R.id.next_month_image_view);\n\n calendarRecyclerView = v.findViewById(R.id.calendar_recycler_view);\n monthYearTextView = v.findViewById(R.id.month_year_text_view);\n\n selectedDate = LocalDate.now();\n\n setMonthYear();\n\n previousMonthImageView.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View view) {\n selectedDate = selectedDate.minusMonths(1);\n setMonthYear();\n }\n });\n\n nextMonthImageView.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View view) {\n selectedDate = selectedDate.plusMonths(1);\n setMonthYear();\n }\n });\n\n monthYearTextView.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View view) {\n monthYearPicker(v);\n }\n });\n\n\n return v;\n}\n\nprivate void setMonthYear() {\n monthYearTextView.setText(monthYearFromDate(selectedDate));\n ArrayList<String> daysInMonth = daysInMonthArray(selectedDate);\n\n CalendarAdapter calendarAdapter = new CalendarAdapter(getActivity(), daysInMonth,\n this);\n RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 7);\n calendarRecyclerView.setLayoutManager(layoutManager);\n calendarRecyclerView.setAdapter(calendarAdapter);\n}\n\nprivate ArrayList<String> daysInMonthArray(LocalDate date) {\n ArrayList<String> daysInMonthList = new ArrayList<>();\n YearMonth yearMonth = YearMonth.from(date);\n int daysInMonth = yearMonth.lengthOfMonth();\n LocalDate firstDayOfMonth = selectedDate.withDayOfMonth(1);\n int dayOfWeek = firstDayOfMonth.getDayOfWeek().getValue();\n if (dayOfWeek == 7){\n dayOfWeek = 1;\n } else {\n dayOfWeek++;\n }\n\n for (int i = 1; i <= 42; i++) {\n if (i < dayOfWeek || i >= daysInMonth + dayOfWeek){\n daysInMonthList.add("");\n } else {\n daysInMonthList.add(String.valueOf(i - dayOfWeek + 1));\n }\n }\n\n return daysInMonthList;\n}\n\nprivate String monthYearFromDate(LocalDate localDate) {\n DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");\n return localDate.format(formatter);\n}\n\n@Override\npublic void onItemClick(int position, String dayText) {\n LocalDate firstDayOfMonth = selectedDate.withDayOfMonth(1);\n int dayOfWeek = firstDayOfMonth.getDayOfWeek().getValue();\n if (dayOfWeek == 7){\n dayOfWeek = 1;\n } else {\n dayOfWeek++;\n }\n if (!dayText.equals("")){\n /*Toast.makeText(getActivity(), dayText + " " + monthYearFromDate(selectedDate),\n Toast.LENGTH_SHORT).show();*/\n Toast.makeText(getActivity(), String.valueOf(dayOfWeek),\n Toast.LENGTH_SHORT).show();\n }\n}\n\npublic void monthYearPicker(View v){\n BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(getActivity(),\n R.style.BottomSheetDialogTheme);\n View bottomSheetView = LayoutInflater.from(getActivity())\n .inflate(R.layout.month_and_year_picker_bottom_sheet_layout,\n (ConstraintLayout) v.findViewById(R.id.month_year_picker_bottom_sheet_container));\n\n\n monthNumberPicker = bottomSheetView.findViewById(R.id.month_number_picker);\n yearNumberPicker = bottomSheetView.findViewById(R.id.year_number_picker);\n final Calendar calendar = Calendar.getInstance();\n\n Month.initMonths();\n monthNumberPicker.setMinValue(0);\n monthNumberPicker.setMaxValue(Month.getMonthArrayList().size() - 1);\n monthNumberPicker.setDisplayedValues(Month.monthNames());\n monthNumberPicker.setValue(calendar.get(Calendar.MONTH));\n\n yearNumberPicker.setMinValue(1984);\n yearNumberPicker.setMaxValue(2040);\n yearNumberPicker.setValue(calendar.get(Calendar.YEAR));\n\n bottomSheetView.findViewById(R.id.month_year_picker_ok_text_view).setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View view) {\n bottomSheetDialog.dismiss();\n selectedDate.withMonth(monthNumberPicker.getValue());\n setMonthYear();\n Toast.makeText(getActivity(), Month.getMonthArrayList().get(monthNumberPicker.getValue()).getName(),\n Toast.LENGTH_SHORT).show();\n }\n });\n\n\n bottomSheetDialog.setContentView(bottomSheetView);\n bottomSheetDialog.show();\n\n\n}\nRun Code Online (Sandbox Code Playgroud)\n}
\n LocalDate date1 = LocalDate.of(2021, Month.JANUARY, 1);
LocalDate date2 = date1.withYear(2010);
LocalDate date3 = date2.withMonth(Month.DECEMBER.getValue());
LocalDate date4 = date3.withDayOfMonth(15);
LocalDate date5 = date4.with(ChronoField.DAY_OF_YEAR, 100);
Run Code Online (Sandbox Code Playgroud)
从https://kodejava.org/how-do-i-manipulate-the-value-of-localdate-object/窃取
简单的纯Java实现:
Calendar.getInstance();cal.setTime(pDate);cal.add(pField, pValue);或cal.set(pField, pValue);cal.getTime();您还可以使用新的java.time包,以及诸如此类的类LocalDateTime。
还有无数的 Java 日期时间库。
选择最适合您的方式。