java做日历怎么对齐日期_如何使用Java日历从日期中减去X天?
如何使用Java日歷從日期中減去X天?
有人知道使用Java日歷從日期中減去X天的簡(jiǎn)單方法嗎?
我無法找到任何允許我直接從Java中的日期減去X天的函數(shù)。 有人能指出我正確的方向嗎?
9個(gè)解決方案
273 votes
取自這里的文檔:
根據(jù)日歷的規(guī)則,將指定的時(shí)間量添加或減去給定的日歷字段。 例如,要從日歷的當(dāng)前時(shí)間減去5天,您可以通過調(diào)用以下內(nèi)容來實(shí)現(xiàn):
Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -5).
Anson Smith answered 2019-04-16T21:34:21Z
38 votes
您可以使用Date方法并將其傳遞給負(fù)數(shù)。 但是,您還可以編寫一個(gè)更簡(jiǎn)單的方法,不使用Date類,如下所示
public static void addDays(Date d, int days)
{
d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}
這將獲取日期的時(shí)間戳值(自紀(jì)元以來的毫秒數(shù))并添加適當(dāng)?shù)暮撩霐?shù)。 您可以為days參數(shù)傳遞負(fù)整數(shù)以進(jìn)行減法。 這比“適當(dāng)?shù)摹比諝v解決方案簡(jiǎn)單:
public static void addDays(Date d, int days)
{
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, days);
d.setTime( c.getTime().getTime() );
}
請(qǐng)注意,這兩個(gè)解決方案都會(huì)更改作為參數(shù)傳遞的Date對(duì)象,而不是返回一個(gè)全新的Date。如果需要,可以輕松更改其中任何一個(gè)函數(shù)。
Eli Courtwright answered 2019-04-16T21:34:59Z
35 votes
Anson的答案適用于簡(jiǎn)單的情況,但是如果你要進(jìn)行更復(fù)雜的日期計(jì)算,我建議你查看Joda Time。 它會(huì)讓你的生活更輕松。
在Joda時(shí)間你可以做的
DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
Mike Deck answered 2019-04-16T21:35:29Z
10 votes
TL;博士
LocalDate.now().minusDays( 10 )
最好指定時(shí)區(qū)。
LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )
細(xì)節(jié)
與早期版本的Java捆綁在一起的舊日期時(shí)間類,例如YearQuarter/.Calendar,已被證明是麻煩,令人困惑和有缺陷的。 避免他們。
java.time
Java 8及更高版本使用新的java.time框架取代了那些舊類。 請(qǐng)參閱教程。 由JSR 310定義,靈感來自Joda-Time,并由ThreeTen-Extra項(xiàng)目擴(kuò)展。 ThreeTen-Backport項(xiàng)目將類反向移植到Java 6&7; Android的ThreeTenABP項(xiàng)目。
該問題含糊不清,如果要求僅提供日期或日期時(shí)間,則不清楚。
YearQuarter
對(duì)于僅限日期,沒有時(shí)間,請(qǐng)使用YearQuarter類。 請(qǐng)注意,在確定日期(例如“今天”)時(shí),時(shí)區(qū)至關(guān)重要。
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );
YearQuarter
如果您的意思是日期時(shí)間,那么請(qǐng)使用YearQuarter類來獲取UTC時(shí)間軸上的時(shí)刻。 從那里,調(diào)整到時(shí)區(qū)以獲得YearQuarter對(duì)象。
Instant now = Instant.now(); // UTC.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );
關(guān)于java.time
java.time框架內(nèi)置于Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時(shí)間類,如YearQuarter,YearQuarter,&YearQuarter。
現(xiàn)在處于維護(hù)模式的Joda-Time項(xiàng)目建議遷移到j(luò)ava.time類。
要了解更多信息,請(qǐng)參閱Oracle教程。 并搜索Stack Overflow以獲取許多示例和解釋。 規(guī)范是JSR 310。
您可以直接與數(shù)據(jù)庫(kù)交換java.time對(duì)象。 使用符合JDBC 4.2或更高版本的JDBC驅(qū)動(dòng)程序。 不需要字符串,不需要YearQuarter類。
從哪里獲取java.time類?
Java SE 8,Java SE 9,Java SE 10及更高版本內(nèi)置。
帶有捆綁實(shí)現(xiàn)的標(biāo)準(zhǔn)Java API的一部分。
Java 9增加了一些小功能和修復(fù)。
Java SE 6和Java SE 7許多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。
Android的更高版本的Android捆綁java.time類的實(shí)現(xiàn)。
對(duì)于早期的Android(< 26),ThreeTenABP項(xiàng)目采用ThreeTen-Backport(如上所述)。 請(qǐng)參見如何使用ThreeTenABP ....
ThreeTen-Extra項(xiàng)目使用其他類擴(kuò)展了java.time。 該項(xiàng)目是未來可能添加到j(luò)ava.time的試驗(yàn)場(chǎng)。 您可以在這里找到一些有用的課程,如YearQuarter,YearQuarter,YearQuarter等。
Basil Bourque answered 2019-04-16T21:37:22Z
5 votes
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);
編輯:解析器似乎不喜歡Javadoc的鏈接,所以這里是純文本:
[http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#add(int,)int)
matt b answered 2019-04-16T21:37:53Z
5 votes
而不是按照Eli的建議編寫我自己的Date,我更愿意使用Apache的DateUtils。 它非常方便,特別是當(dāng)您必須在項(xiàng)目中使用多個(gè)位置時(shí)。
API說:
Date
在返回新對(duì)象的日期中添加若干天。
請(qǐng)注意,它返回一個(gè)新的Date對(duì)象,并且不會(huì)對(duì)前一個(gè)對(duì)象進(jìn)行更改。
Risav Karna answered 2019-04-16T21:38:40Z
1 votes
有人推薦Joda Time所以 - 我一直在使用這個(gè)CalendarDate類[http://calendardate.sourceforge.net]
這是一個(gè)與Joda Time有點(diǎn)競(jìng)爭(zhēng)的項(xiàng)目,但只有2個(gè)班級(jí)更基本。 它非常方便,并且非常適合我需要的東西,因?yàn)槲也幌胧褂帽任业捻?xiàng)目更大的包。 與Java對(duì)應(yīng)物不同,它的最小單位是當(dāng)天,所以它實(shí)際上是一個(gè)日期(沒有它到毫秒或其他東西)。 一旦你創(chuàng)建了日期,你所做的所有減法就像myDay.addDays(-5)那樣可以追溯到5天。 您可以使用它來查找星期幾和類似的事情。另一個(gè)例子:
CalendarDate someDay = new CalendarDate(2011, 10, 27);
CalendarDate someLaterDay = today.addDays(77);
和:
//print 4 previous days of the week and today
String dayLabel = "";
CalendarDate today = new CalendarDate(TimeZone.getDefault());
CalendarDateFormat cdf = new CalendarDateFormat("EEE");//day of the week like "Mon"
CalendarDate currDay = today.addDays(-4);
while(!currDay.isAfter(today)) {
dayLabel = cdf.format(currDay);
if (currDay.equals(today))
dayLabel = "Today";//print "Today" instead of the weekday name
System.out.println(dayLabel);
currDay = currDay.addDays(1);//go to next day
}
mikato answered 2019-04-16T21:39:13Z
1 votes
它可以通過以下方式輕松完成
Calendar calendar = Calendar.getInstance();
// from current time
long curTimeInMills = new Date().getTime();
long timeInMills = curTimeInMills - 5 * (24*60*60*1000); // `enter code here`subtract like 5 days
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
// from specific time like (08 05 2015)
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.MONTH, (5-1));
calendar.set(Calendar.YEAR, 2015);
timeInMills = calendar.getTimeInMillis() - 5 * (24*60*60*1000);
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
rab answered 2019-04-16T21:39:38Z
0 votes
Eli Courtwright的第二個(gè)解決方案是錯(cuò)誤的,它應(yīng)該是:
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());
user178973 answered 2019-04-16T21:40:03Z
總結(jié)
以上是生活随笔為你收集整理的java做日历怎么对齐日期_如何使用Java日历从日期中减去X天?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java input属性_如何在h:in
- 下一篇: HTML输入学生成绩并排序java_JS