如何更改星期几以匹配递增的日期?
How to change the day of week to match an incremented date?
我有以下代码可以将日历月递增一个月。
c.add(Calendar.MONTH, 1);
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy");
String oneMonth = sdf.format(c.getTime());
当新日期递增时,我将其显示在 textView 中。我还想显示与新的递增日期对应的星期几。我将如何用代码完成它?我尝试在上面的代码下面设置这个新代码,但在这种情况下它没有正确设置星期几。
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);
有人可以帮我完成这个吗?感谢您的宝贵时间和协助。
更新:::
对我有用的解决方案:
像这样将 "EEEE" 添加到原来的简单日期格式...
SimpleDateFormat sdf = new SimpleDateFormat("EEEE, MMM-dd-yyyy");
String oneMonth = sdf.format(c.getTime());
如果您有 Date 类型,将其传递给此方法,它将 return 为您指定正确的日期。请注意它如何使用 Calendar
和 Calendar.DAY_OF_WEEK
来获取您要查找的内容。
public static String getDateDay(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int day = calendar.get(Calendar.DAY_OF_WEEK);
String dayOfWeek = null;
switch (day){
case Calendar.MONDAY:
dayOfWeek = "Monday";
break;
case Calendar.TUESDAY:
dayOfWeek = "Tuesday";
break;
case Calendar.WEDNESDAY:
dayOfWeek = "Wednesday";
break;
case Calendar.THURSDAY:
dayOfWeek = "Thursday";
break;
case Calendar.FRIDAY:
dayOfWeek = "Friday";
break;
case Calendar.SATURDAY:
dayOfWeek = "Saturday";
break;
case Calendar.SUNDAY:
dayOfWeek = "Sunday";
break;
}
return dayOfWeek;
}
TL;DR
LocalDate date = LocalDate.of(2017, Month.DECEMBER, 13);
date = date.plusMonths(1);
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM-dd-yyyy", Locale.ENGLISH);
String oneMonth = date.format(dateFormatter);
System.out.println(oneMonth);
DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);
String dayOfTheWeek = date.format(dayOfWeekFormatter);
System.out.println(dayOfTheWeek);
这会打印
Jan-13-2018
Saturday
java.time 又名 JSR 310
即使在 Android 上,也可以考虑使用 JSR 310,现代 Java 日期和时间 API 也称为 java.time
。与它一起工作要好得多。你能在 Android 上做到这一点吗?当然!获取 ThreeTenABP 并继续。 Link 详细解释的问题在这个答案的末尾。
对于任何阅读而不是为 Android 编码的人:现代 API 内置于 Java 8 及更高版本中。在 Java 6 和 7 你需要 ThreeTen Backport,我在最后提供了一个 link。
你的代码出了什么问题?
我不知道你做错了什么。正如我在评论中所说,您的代码对我有用。你说当用户输入另一个日期时,递增的日期发生了变化。对这种行为的一种可能解释是,如果您将一个 Calendar
对象(可能从两个变量引用)用于两个目的。虽然这样的错误当然可以被追踪和修复,但你不太可能首先将它引入现代 API 因为 plusMonths()
创建了一个 new LocalDate
object,保留原来的那个不修改(实际上是不可修改的)。
Links
我找到了我的问题,它是如此简单以至于我不相信我错过了它。我只需要将 "EEEE" 添加到 "MM-dd-yyyy" 的原始简单日期格式中,就像这样 "EEEE, MM-dd-yyyy" 即可输出正确的星期几和日期。很抱歉浪费时间,但非常感谢您的时间和信息。我每天都在学习更多。再次感谢那些试图帮助我的人。非常感激!
我有以下代码可以将日历月递增一个月。
c.add(Calendar.MONTH, 1);
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy");
String oneMonth = sdf.format(c.getTime());
当新日期递增时,我将其显示在 textView 中。我还想显示与新的递增日期对应的星期几。我将如何用代码完成它?我尝试在上面的代码下面设置这个新代码,但在这种情况下它没有正确设置星期几。
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);
有人可以帮我完成这个吗?感谢您的宝贵时间和协助。
更新::: 对我有用的解决方案:
像这样将 "EEEE" 添加到原来的简单日期格式...
SimpleDateFormat sdf = new SimpleDateFormat("EEEE, MMM-dd-yyyy");
String oneMonth = sdf.format(c.getTime());
如果您有 Date 类型,将其传递给此方法,它将 return 为您指定正确的日期。请注意它如何使用 Calendar
和 Calendar.DAY_OF_WEEK
来获取您要查找的内容。
public static String getDateDay(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int day = calendar.get(Calendar.DAY_OF_WEEK);
String dayOfWeek = null;
switch (day){
case Calendar.MONDAY:
dayOfWeek = "Monday";
break;
case Calendar.TUESDAY:
dayOfWeek = "Tuesday";
break;
case Calendar.WEDNESDAY:
dayOfWeek = "Wednesday";
break;
case Calendar.THURSDAY:
dayOfWeek = "Thursday";
break;
case Calendar.FRIDAY:
dayOfWeek = "Friday";
break;
case Calendar.SATURDAY:
dayOfWeek = "Saturday";
break;
case Calendar.SUNDAY:
dayOfWeek = "Sunday";
break;
}
return dayOfWeek;
}
TL;DR
LocalDate date = LocalDate.of(2017, Month.DECEMBER, 13);
date = date.plusMonths(1);
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM-dd-yyyy", Locale.ENGLISH);
String oneMonth = date.format(dateFormatter);
System.out.println(oneMonth);
DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);
String dayOfTheWeek = date.format(dayOfWeekFormatter);
System.out.println(dayOfTheWeek);
这会打印
Jan-13-2018
Saturday
java.time 又名 JSR 310
即使在 Android 上,也可以考虑使用 JSR 310,现代 Java 日期和时间 API 也称为 java.time
。与它一起工作要好得多。你能在 Android 上做到这一点吗?当然!获取 ThreeTenABP 并继续。 Link 详细解释的问题在这个答案的末尾。
对于任何阅读而不是为 Android 编码的人:现代 API 内置于 Java 8 及更高版本中。在 Java 6 和 7 你需要 ThreeTen Backport,我在最后提供了一个 link。
你的代码出了什么问题?
我不知道你做错了什么。正如我在评论中所说,您的代码对我有用。你说当用户输入另一个日期时,递增的日期发生了变化。对这种行为的一种可能解释是,如果您将一个 Calendar
对象(可能从两个变量引用)用于两个目的。虽然这样的错误当然可以被追踪和修复,但你不太可能首先将它引入现代 API 因为 plusMonths()
创建了一个 new LocalDate
object,保留原来的那个不修改(实际上是不可修改的)。
Links
我找到了我的问题,它是如此简单以至于我不相信我错过了它。我只需要将 "EEEE" 添加到 "MM-dd-yyyy" 的原始简单日期格式中,就像这样 "EEEE, MM-dd-yyyy" 即可输出正确的星期几和日期。很抱歉浪费时间,但非常感谢您的时间和信息。我每天都在学习更多。再次感谢那些试图帮助我的人。非常感激!