我有点咸菜。我正在构建一个应用程序,该应用程序从DatePicker显示日期,月份,年份和星期数。选择日期后,日期和星期数应显示在屏幕上。我设法显示了正确的日期,但是我很难显示星期数
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
bottomNav.setOnNavigationItemSelectedListener(navListener);
datePicker = (DatePicker) findViewById(R.id.kalender);
datoText = (TextView) findViewById(R.id.kalenderText);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
final int week = calendar.get(Calendar.WEEK_OF_YEAR);
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
String dato = dayOfMonth + " / " + (monthOfYear + 1) + " / " + year;
datoText.setText(dato);
}
});
所以,我的问题是:如何显示所选日期的星期数?
答案 0 :(得分:1)
即使您不想显示星期数,也应该使用格式化程序来格式化显示日期。这反过来也将很好地照顾星期数。我建议您在类中声明格式化程序的常量:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("d/M/u 'Uke' w", Locale.forLanguageTag("no"));
现在剩下的事情很简单了:
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
LocalDate dato = LocalDate.of(year, monthOfYear + 1, dayOfMonth);
datoText.setText(dato.format(DATE_FORMATTER));
}
这将显示类似2/4/2019 Uke 14
的字符串。您可以根据需要的输出量身定制格式模式字符串。不应解释为格式模式字母的字母放在单引号(撇号)内,例如'Uke'
。
我正在使用现代Java日期和时间API java.time。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。如果您不能负担外部依赖项(即使在坚如磐石且面向未来的库中),则可以类似的方式使用老式的SimpleDateFormat
,但前提是必须转换选定的值首先到Calendar
,然后到Date
。但是请注意,SimpleDateFormat
类非常麻烦并且也不是线程安全的。
java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。