如何获得一个月第一天的名字?

时间:2012-01-25 02:39:14

标签: java

如何获得本月的第一天?因此,对于今年1月,它将在周日返回。然后是二月,它将在周三返回。

8 个答案:

答案 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.Datejava.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.time

从Java 8开始,我们也可以使用YearMonth类,它允许我们在指定的日期(第一个,最后一个)创建LocalDate个对象。然后,我们只需将这些日期转换为DayOfWeek EnumTutorial)并阅读其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中,您可以使用新的LocalDateLocalTime 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)

java.time,软编码

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 ) ;