我试图获得与日期相对应的星期几。 我使用 Java日历 和 SimpleDateFormat 。
但我得错了输出。例如,对于这个日期:
代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test {
public static void main(String[] args) throws ParseException {
String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
String date1 = "**2016-10-09**";
String date2 = "**2016-10-10**";
Date d1 = new SimpleDateFormat("yyyy-Mm-Dd").parse( date1 );
Date d2 = new SimpleDateFormat("yyyy-Mm-Dd").parse( date2 );
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
String day1 = days[cal.get(Calendar.DAY_OF_WEEK)-1];
cal = Calendar.getInstance();
cal.setTime(d2);
String day2 = days[cal.get(Calendar.DAY_OF_WEEK)-1];
System.out.printf(date1+" "+day1+"\n"+date2+" "+day2);
}
}
输出:
2016-10-09 Sunday
2016-10-10 Friday * / p>
答案 0 :(得分:1)
将格式化程序字符串更改为 yyyy-MM-dd ,将天数数组更改为星期日
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String date1 = "2016-10-09";
String date2 = "2016-10-10";
Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse( date1 );
Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse( date2 );
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
String day1 = days[cal.get(Calendar.DAY_OF_WEEK)-1];
System.out.printf(date1+" "+day1+"\n");
cal = Calendar.getInstance();
cal.setTime(d2);
String day2 = days[cal.get(Calendar.DAY_OF_WEEK)-1];
System.out.printf(date1+" "+day1+"\n");
}
}
答案 1 :(得分:1)
LocalDate.parse( "2016-10-10" )
.getDayOfWeek()
.getDisplayName( TextStyle.FULL , Locale.US )
周一
请参阅此code run live at IdeOne.com。
您正在使用旧的日期时间类,现在是旧的,取而代之的是java.time类。现代课程更加简单。
无需指定格式设置模式,因为您输入的内容符合java.time类中默认使用的ISO 8601标准。这可以避免原始代码中的错误解析问题。
LocalDate ld = LocalDate.parse( "2016-10-10" ) ;
DayOfWeek
枚举定义了七个对象,一个星期中的每一天。在代码中使用这些代替数字或字符串。
DayOfWeek dow = ld.getDayOfWeek();
String output = dow.getDisplayName( TextStyle.FULL , Locale.US ); // Or Locale.CANADA_FRENCH etc.
解析相关的两个日期。
LocalDate ld09 = LocalDate.parse( "2016-10-09" ) ;
LocalDate ld10 = LocalDate.parse( "2016-10-10" ) ;
生成每个日期的星期几的显示名称。
String output09 = ld09 + " | " +
ld09.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.US ) ;
String output10 = ld10 + " | " +
ld10.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.US ) ;
转储到控制台。
System.out.println( output09 );
System.out.println( output10 );
2016-10-09 |周日
2016-10-10 |星期一
为了好玩,同样的事情在加拿大法语。
String output10_Québec = ld10 + " | " +
ld10.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
2016-10-10 | Lundi将军
请参阅this code in action in ideone.com。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。