如何获得本月的第一天?因此,对于今年1月,它将在周日返回。然后是二月,它将在周三返回。
答案 0 :(得分:42)
要获取当月的第一个日期,请使用java.util.Calendar
。首先获取它的实例并将字段Calendar.DAY_OF_MONTH
设置为该月的第一个日期。由于任何月份的第一天为1,因此cal.getActualMinimum(Calendar.DAY_OF_MONTH)
可以使用,这里可以使用1。
private Date getFirstDateOfCurrentMonth() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTime();
}
答案 1 :(得分:13)
您可以使用您想要的任何日期创建Calendar
,然后执行set(Calendar.DAY_OF_MONTH, 1)
以获得一个月的第一天。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 25);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = cal.getTime();
DateFormat sdf = new SimpleDateFormat("EEEEEEEE");
System.out.println("First Day of Month: " + sdf.format(firstDayOfMonth));
答案 2 :(得分:5)
public int getFirstDay(){
Calendar c=new GregorianCalendar();
c.set(Calendar.DAY_OF_MONTH, 1);
return c.get(Calendar.DAY_OF_WEEK);
}
从那里你可以看到int是否等于Calendar.SUNDAY,Calendar.MONDAY等。
答案 3 :(得分:4)
在Java 8中,您可以使用 TemporalAdjusters:
这是一个例子:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
/**
* Dates in Java8
*
*/
public class App {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
System.out.println("Day of Month: " + localDate.getDayOfMonth());
System.out.println("Month: " + localDate.getMonth());
System.out.println("Year: " + localDate.getYear());
System.out.printf("first day of Month: %s%n",
localDate.with(TemporalAdjusters.firstDayOfMonth()));
System.out.printf("first Monday of Month: %s%n", localDate
.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
System.out.printf("last day of Month: %s%n",
localDate.with(TemporalAdjusters.lastDayOfMonth()));
System.out.printf("first day of next Month: %s%n",
localDate.with(TemporalAdjusters.firstDayOfNextMonth()));
System.out.printf("first day of next Year: %s%n",
localDate.with(TemporalAdjusters.firstDayOfNextYear()));
System.out.printf("first day of Year: %s%n",
localDate.with(TemporalAdjusters.firstDayOfYear()));
LocalDate tomorrow = localDate.plusDays(1);
System.out.println("Day of Month: " + tomorrow.getDayOfMonth());
System.out.println("Month: " + tomorrow.getMonth());
System.out.println("Year: " + tomorrow.getYear());
}
}
结果将是:
Day of Month: 16
Month: MAY
Year: 2014
first day of Month: 2014-05-01
first Monday of Month: 2014-05-05
last day of Month: 2014-05-31
first day of next Month: 2014-06-01
first day of next Year: 2015-01-01
first day of Year: 2014-01-01
Last in Month Tuesday: 2014-05-27
Day of Month: 17
Month: MAY
Year: 2014
答案 4 :(得分:2)
创建java.util.Date
或java.util.Calendar
对象,设置日期值并使用java.text.SimpleDateFormat
类方法对其进行格式化。
Calendar cal=Calendar.getInstance();
cal.set(Calendar.DATE,1);
cal.set(Calendar.MONTH,0);
cal.set(Calendar.YEAR,2012);
SimpleDateFormat sdf=new SimpleDateFormat("EEEE");
System.out.println(sdf.format(cal.getTime()));
答案 5 :(得分:2)
从Java 8开始,我们也可以使用YearMonth
类,它允许我们在指定的日期(第一个,最后一个)创建LocalDate
个对象。然后,我们只需将这些日期转换为DayOfWeek
Enum(Tutorial)并阅读其name
属性。
YearMonth ym = YearMonth.of(2012, 1);
String firstDay = ym.atDay(1).getDayOfWeek().name();
String lastDay = ym.atEndOfMonth().getDayOfWeek().name();
System.out.println(firstDay);
System.out.println(lastDay);
结果:
SUNDAY
TUESDAY
答案 6 :(得分:2)
TemporalAdjuster
在Java 8中,您可以使用新的LocalDate和LocalTime API。
要获得令人垂涎的结果,请尝试以下操作。它会打印给定日期的名称。
import java.time.*;
import java.time.temporal.*;
public class Main {
public static void main(String[] args) {
LocalDate l = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
System.out.println(l.getDayOfWeek());
}
}
说明:
now
为您提供当前日期。with
,您可以传递TemporalAdjuster
,这是用于修改时间对象的关键工具。getDayOfWeek
获取星期几字段,它是一个枚举DayOfWeek
。
这包括值的文本名称。 TemporalAdjuster
有一个兄弟类,称为TemporalAdjusters
,其中包含有关调整的静态方法,例如您正在寻找的firstDayOfMonth
答案 7 :(得分:1)
Pshemo的Answer既优秀又聪明,但却用英文编码。让我们来看看它是否允许本地化。
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Time zone is crucial to determining a date.
YearMonth yearMonth = YearMonth.now( zoneId );
LocalDate firstOfMonth = yearMonth.atDay( 1 );
生成LocalDate
的文本表示。我们指定了所需的Locale
,在本例中为CANADA_FRENCH
。如果省略,则隐式应用JVM的当前默认Locale;最好指定显式的Locale。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "EEEE" ).withZone( zoneId ).withLocale( Locale.CANADA_FRENCH ); // Exactly four 'E' letters means full form. http://docs.oracle.com/javase/8/docs/api/java/time/format/TextStyle.html#FULL
String output = formatter.format( firstOfMonth );
转储到控制台。
System.out.println( "output: " + output );
跑步时。
samedi
DayOfWeek
Enum 另一种方法是使用DayOfWeek
枚举。此枚举包含getDisplayName
方法,您可以同时指定text style(全名与缩写)和Locale
。
DayOfWeek dayOfWeek = firstOfMonth.getDayOfWeek() ;
String output = dayOfWeek.getDisplayName( TextStyle.FULL_STANDALONE , Locale.CANADA_FRENCH ) ;