如果我在Java中有int year,int month,int day,那么如何查找日期名称?这已经有了一些功能吗?
答案 0 :(得分:42)
使用SimpleDateFormat
模式EEEE
获取星期几的名称。
// Assuming that you already have this.
int year = 2011;
int month = 7;
int day = 22;
// First convert to Date. This is one of the many ways.
String dateString = String.format("%d-%d-%d", year, month, day);
Date date = new SimpleDateFormat("yyyy-M-d").parse(dateString);
// Then get the day of week from the Date based on specific locale.
String dayOfWeek = new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date);
System.out.println(dayOfWeek); // Friday
这里把它包装成一个很好的Java类。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtility
{
public static void main(String args[]){
System.out.println(dayName("2015-03-05 00:00:00", "YYYY-MM-DD HH:MM:ss"));
}
public static String dayName(String inputDate, String format){
Date date = null;
try {
date = new SimpleDateFormat(format).parse(inputDate);
} catch (ParseException e) {
e.printStackTrace();
}
return new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date);
}
}
答案 1 :(得分:13)
您可以执行this之类的操作,以获取不同语言区域的星期几的名称。
这是重要的部分:
DateFormatSymbols dfs = new DateFormatSymbols(usersLocale);
String weekdays[] = dfs.getWeekdays();
可与此结合使用:
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_WEEK);
获得您想要的东西:
String nameOfDay = weekdays[day];
答案 2 :(得分:9)
工作日的名称因地区而异。因此,您必须使用具有适当区域设置的DateFormat
。例如:
SimpleDateFormat format = new SimpleDateFormat("EEEE");
System.out.println(format.format(date));
可以通过多种方式获取Date
对象,包括已弃用的Date(..)
构造函数,Calendar.set(..)
方法或joda-time DateTime
。 (对于后者,你可以使用joda-time自己的DateTimeFormat
)
答案 3 :(得分:8)
使用年,月和日构建GregorianCalendar,然后查询它以查找当天的名称。像这样:
int year = 1977;
int month = 2;
int dayOfMonth = 15;
Calendar myCalendar = new GregorianCalendar(year, month, dayOfMonth);
int dayOfWeek = myCalendar.get(Calendar.DAY_OF_WEEK);
请注意,星期几作为int表示,该int表示语言环境的工作日表示中当天的序数。 IE,在工作日星期一开始并在星期日结束的语言环境中,2表示星期二,而如果星期日星期日从星期日开始,那么相同的2表示星期一。
修改强> 的
由于正在进行大量的答案编辑,请允许我添加以下内容:
DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault());
String dayOfMonthStr = symbols.getWeekdays()[dayOfMonth];
老实说,我更喜欢SimpleDateFormatter方法,因为它封装了与上面所示完全相同的代码。愚蠢的我忘掉了它。
答案 4 :(得分:6)
您可以使用Calendar对象来查找此内容。
创建日历实例后,您将获得DAY_OF_WEEK(这是一个int),然后您可以从那里找到那一天)
您可以使用切换语句like so:
import java.util.*;
public class DayOfWeek {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_WEEK);
System.out.print("Today is ");
switch (day) {
case 1:
System.out.print("Sunday");
break;
case 2:
System.out.print("Monday");
break;
case 3:
System.out.print("Tuesday");
break;
case 4:
System.out.print("Wednesday");
break;
case 5:
System.out.print("Thursday");
break;
case 6:
System.out.print("Friday");
break;
case 7:
System.out.print("Saturday");
}
System.out.print(".");
}
}
答案 5 :(得分:4)
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 22); //Set Day of the Month, 1..31
cal.set(Calendar.MONTH,6); //Set month, starts with JANUARY = 0
cal.set(Calendar.YEAR,2011); //Set year
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //Starts with Sunday, 6 = friday
答案 6 :(得分:1)
new GregorianCalendar().setTime(new Date()).get(DAY_OF_WEEK)
这会为您提供一个号码,Calendar.SUNDAY == 1
,Calendar.MONDAY == 2
,...
答案 7 :(得分:1)
是的,但这对JDK来说是一个相当漫长的过程。 JodaTime可能是更好的选择(我没有使用它)。
首先,您获得一个Calendar
对象,以便您可以构建日/月/年/时区的日期。不要使用其中一个已弃用的Date
构造函数。
然后从该日历中获取Date
个对象,并将其传递给SimpleDateFormat
。请注意,格式对象不是线程安全的。
// by default, this Calendar object will have the current timezone
Calendar cal = GregorianCalendar.getInstance();
cal.set(2011, 6, 22);
// this formatter will have the current locale
SimpleDateFormat format = new SimpleDateFormat("EEEE");
System.out.println(format.format(cal.getTime()));
答案 8 :(得分:1)
使用Joda-Time库时,这种日期时间工作更容易。一个简单的单行。
String dayOfWeek = new LocalDate( 2014, 1, 2 ).dayOfWeek().getAsText( java.util.Locale.ENGLISH );
System.out.println( "dayOfWeek: " + dayOfWeek );
跑步时......
dayOfWeek: Thursday