Java получить первую дату и последнюю дату данного месяца и данного года
Я пытаюсь получить первую дату и последнюю дату данного месяца и года. Я использовал следующий код, чтобы получить последнюю дату в формате yyyyMMdd. Но не смог получить этот формат. Кроме того, я хочу, чтобы дата начала была в том же формате. Я все еще работаю над этим. Может ли кто-нибудь помочь мне в исправлении приведенного ниже кода.
public static java.util.Date calculateMonthEndDate(int month, int year) {
int[] daysInAMonth = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = daysInAMonth[month];
boolean isLeapYear = new GregorianCalendar().isLeapYear(year);
if (isLeapYear && month == 2) {
day++;
}
GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);
java.util.Date monthEndDate = new java.util.Date(gc.getTime().getTime());
return monthEndDate;
}
public static void main(String[] args) {
int month = 3;
int year = 2076;
final java.util.Date calculatedDate = calculateMonthEndDate(month, year);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
format.format(calculatedDate);
System.out.println("Calculated month end date : " + calculatedDate);
}
Ответы
Ответ 1
Чтобы получить Дата начала
GregorianCalendar gc = new GregorianCalendar(year, month-1, 1);
java.util.Date monthEndDate = new java.util.Date(gc.getTime().getTime());
System.out.println(monthEndDate);
( Примечание: в дате начала день= 1)
для отформатированного
SimpleDateFormat format = new SimpleDateFormat(/////////add your format here);
System.out.println("Calculated month end date : " + format.format(calculatedDate));
Ответ 2
методы java.time.YearMonth
::atDay
& ::atEndOfMonth
Новый фреймворк java.time в Java 8 (Tutorial) содержит команды для этого.
YearMonth
названный класс YearMonth
представляет месяц года без какого-либо определенного дня или времени. Оттуда мы можем спросить о первом и днях месяца.
YearMonth yearMonth = YearMonth.of( 2015, 1 ); // January of 2015.
LocalDate firstOfMonth = yearMonth.atDay( 1 );
LocalDate last = yearMonth.atEndOfMonth();
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.
Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений. Спецификация JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Ответ 3
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
format.format(calculatedDate);
System.out.println("Calculated month end date : " + calculatedDate);
Измените его на
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String formattedDate = format.format(calculatedDate);
System.out.println("Calculated month end date : " + formattedDate);
Подробнее...
http://docs.oracle.com/javase/1.5.0/docs/api/java/text/DateFormat.html#format(java.util.Date)
Другой подход
package com.shashi.mpoole;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateMagic {
public static String PATTERN = "yyyyMMdd";
static class Measure
{
private int month;
private int year;
private Calendar calendar;
public Measure() {
// TODO Auto-generated constructor stub
init();
}
private void init() {
// TODO Auto-generated method stub
calendar = Calendar.getInstance();
calendar.set(year, month, 1);
}
public String min()
{
return format(calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
}
public String max()
{
return format(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
}
private Date date(GregorianCalendar c)
{
return new java.util.Date(c.getTime().getTime());
}
private GregorianCalendar gc(int day)
{
return new GregorianCalendar(year, month, day);
}
private String format(int day) {
SimpleDateFormat format = new SimpleDateFormat(PATTERN);
return format.format(date(gc(day)));
}
public Measure month(int month) {
// TODO Auto-generated method stub
this.month = month -1 ;
return this;
}
public Measure year(int year) {
// TODO Auto-generated method stub
this.year = year;
return this;
}
}
public static void main(String[] args) {
Measure measure = new Measure().month(3).year(2076);
System.out.println(measure.max());
System.out.println(measure.min());
}
}
Ответ 4
Просто вы можете использовать класс Calendar. вам следует назначить месячную переменную, в которой вы хотите
Calendar gc = new GregorianCalendar();
gc.set(Calendar.MONTH, month);
gc.set(Calendar.DAY_OF_MONTH, 1);
Date monthStart = gc.getTime();
gc.add(Calendar.MONTH, 1);
gc.add(Calendar.DAY_OF_MONTH, -1);
Date monthEnd = gc.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
System.out.println("Calculated month start date : " + format.format(monthStart));
System.out.println("Calculated month end date : " + format.format(monthEnd));
Ответ 5
Попробуйте ввести код за последний день месяца: -
Calendar c = Calendar.getInstance();
c.set(2012,3,1); //------>
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(sdf.format(c.getTime()));
http://www.coderanch.com/t/385759/java/java/date-date-month
Ответ 6
Первый день:
Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH);
Последний день месяца:
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
Ответ 7
GregorianCalendar gc = new GregorianCalendar(year, selectedMonth-1, 1);
java.util.Date monthStartDate = new java.util.Date(gc.getTime().getTime());
Calendar calendar = Calendar.getInstance();
calendar.setTime(monthStartDate);
calendar.add(calendar.MONTH, 1);
calendar.add(calendar.DAY_OF_MONTH, -1);
java.util.Date monthEndDate = new java.util.Date(calendar.getTime())
Ответ 8
Хотя, не совсем ответ на вопрос OP, ниже методы дадут текущий месяц первую и последнюю даты в качестве экземпляров Java 8+ LocalDate.
public static LocalDate getCurrentMonthFirstDate() {
return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).withDayOfMonth(1);
}
public static LocalDate getCurrentMonthLastDate() {
return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).plusMonths(1).withDayOfMonth(1).minusDays(1);
}
Примечание: использование LocalDate.ofEpochDay(...)
вместо LocalDate.now()
дает значительно улучшенную производительность. Кроме того, использование выражения millis-in-a-day вместо конечного значения, которое 86400000
работает лучше. Первоначально я думал, что последнее будет работать лучше, чем выражение: P
Почему этот ответ: Тем не менее это не правильный ответ на вопрос OP, но я все еще отвечаю здесь, когда Google показал этот вопрос, когда я искал "java 8 get date date date":)
Ответ 9
public static Date[] getMonthInterval(Date data) throws Exception {
Date[] dates = new Date[2];
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
start.setTime(data);
start.set(Calendar.DAY_OF_MONTH, start.getActualMinimum(Calendar.DAY_OF_MONTH));
start.set(Calendar.HOUR_OF_DAY, 0);
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
end.setTime(data);
end.set(Calendar.DAY_OF_MONTH, end.getActualMaximum(Calendar.DAY_OF_MONTH));
end.set(Calendar.HOUR_OF_DAY, 23);
end.set(Calendar.MINUTE, 59);
end.set(Calendar.SECOND, 59);
//System.out.println("start "+ start.getTime());
//System.out.println("end "+ end.getTime());
dates[0] = start.getTime();
dates[1] = end.getTime();
return dates;
}