如何得到一个月的一天?
我正试图检索一个月中的哪一天。
如今天是2011年8月29日。
我想要做的只是获得诸如29或30这样的天数。这是哪一天的哪一天。
我怎么去做这个?
你会想得到一个日历实例,并得到它的一个月的一天
Calendar cal = Calendar.getInstance(); int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); String dayOfMonthStr = String.valueOf(dayOfMonth);
您还可以获得DAY_OF_WEEK,DAY_OF_YEAR,DAY_OF_WEEK_IN_MONTH等。
以下方法可以帮助您find任何指定date的一天:
public static int getDayOfMonth(Date aDate) { Calendar cal = Calendar.getInstance(); cal.setTime(aDate); return cal.get(Calendar.DAY_OF_MONTH); }
看看GregorianCalendar
,如下所示:
final Calendar now = GregorianCalendar.getInstance() final int dayNumber = now.get(Calendar.DAY_OF_MONTH);
您可以先阅读Date的文档。 然后你意识到Date的方法都被弃用,转而使用Calender 。
Calendar now = Calendar.getInstance(); System.out.println(now.get(Calendar.DAY_OF_MONTH));
TL;博士
LocalDate.now( ZoneId.of( "America/Montreal" ) ).getDayOfMonth()
java.time
现代的方法是LocalDate
类来表示只有date的值。
时区对确定当前date至关重要。 对于任何特定的时刻,date在全球各地按照地区而不同。
ZoneId z = ZoneId.of( "America/Montreal" ); LocalDate ld = LocalDate.now( z ) ; int dayOfMonth = ld.getDayOfMonth();
你也可以得到星期几。
DayOfWeek dow = ld.getDayOfWeek();
乔达时间
更新:Joda-Time项目现在处于维护模式,并build议迁移到java.time类。
使用Joda-Time 2.5库,而不是使用臭名昭着的java.util.Date和.Calendar类。
时区对确定date至关重要。 最好是指定区域,而不是隐式地依赖JVM当前分配的默认时区。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ); DateTime now = DateTime.now( zone ).withTimeAtStartOfDay(); int dayOfMonth = now.getDayOfMonth();
或者在LocalDate
类中使用类似的代码,它没有时间部分。
Java 8更新
Java 8为时间和date操作引入了下列软件包。
java.time.*; java.time.format.*; java.time.chono.*; java.time.temporal.*; java.time.zone.*;
这些更有组织和直观。
我们只需要讨论最多的两个软件包。
有3个顶级类 – 分别描述date,时间和date时间的LocalDate
, LocalTime
, LocalDateTime
。 虽然它们在toString()
中格式正确,但每个类都有格式化方法,它接受DateTimeFormatter
以自定义的方式进行格式化。
DateTimeFormatter
也可以用来显示每天给定的date。 它几乎没有
import java.time.*; import java.time.format.*; class DateTimeDemo{ public static void main(String...args){ LocalDateTime x = LocalDateTime.now(); System.out.println(x.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)));//Shows Day and Date. System.out.println(x.format(DateTimeFormatter.ofPattern("EE")));//Short Form System.out.println(x.format(DateTimeFormatter.ofPattern("EEEE")));//Long Form } }
ofLocalizedTime
接受在java.time.format
枚举的java.time.format
ofPattern
接受String
限制长度的限制模式字符。 这里是可以传递到toPattern
方法的字符。
您可以尝试不同数量的模式来查看输出结果如何。
查看更多关于Java 8 DateTime API的信息
//This will get you the day of the month String.valueOf((Calendar.getInstance()).get(Calendar.DAY_OF_MONTH))