मेरे पास एक लोकलडेट है जिसे महीने का पहला और आखिरी दिन मिलना चाहिए। मैं उसको कैसे करू?
जैसे। 13/2/2014
मैं प्राप्त करने की आवश्यकता 1/2/2014
है और 28/2/2014
में LOCALDATE प्रारूपों।
थ्रोटन लोकलडेट क्लास का उपयोग करना।
मेरे पास एक लोकलडेट है जिसे महीने का पहला और आखिरी दिन मिलना चाहिए। मैं उसको कैसे करू?
जैसे। 13/2/2014
मैं प्राप्त करने की आवश्यकता 1/2/2014
है और 28/2/2014
में LOCALDATE प्रारूपों।
थ्रोटन लोकलडेट क्लास का उपयोग करना।
जवाबों:
एपीआई को एक समाधान का समर्थन करने के लिए डिज़ाइन किया गया था जो व्यावसायिक आवश्यकताओं के साथ मेल खाता है
import static java.time.temporal.TemporalAdjusters.*;
LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.with(firstDayOfMonth());
LocalDate end = initial.with(lastDayOfMonth());
हालांकि, जॉन के समाधान भी ठीक हैं।
YearMonth
मेरी राय में पूर्णता, और अधिक सुरुचिपूर्ण के लिए, YearMonth
वर्ग का यह उपयोग देखें ।
YearMonth month = YearMonth.from(date);
LocalDate start = month.atDay(1);
LocalDate end = month.atEndOfMonth();
चालू माह के पहले और अंतिम दिन के लिए, यह बन जाता है:
LocalDate start = YearMonth.now().atDay(1);
LocalDate end = YearMonth.now().atEndOfMonth();
LocalDate
with
विधि की तुलना में इसके क्या फायदे हैं ?
LocalDate
शुरू करने के लिए एक उदाहरण की आवश्यकता नहीं है ।
जॉन स्कीट्स का उत्तर सही है और मेरे उत्थान के योग्य है, बस इसे पूर्णता के लिए थोड़ा अलग समाधान जोड़ना है:
import static java.time.temporal.TemporalAdjusters.lastDayOfMonth;
LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.with(lastDayOfMonth());
अगर कोई की तलाश में आता है पिछले महीने के पहले दिन और पिछले महीने के अंतिम दिन :
public static LocalDate firstDayOfPreviousMonth(LocalDate date) {
return date.minusMonths(1).withDayOfMonth(1);
}
public static LocalDate lastDayOfPreviousMonth(LocalDate date) {
return date.withDayOfMonth(1).minusDays(1);
}
आप कस्टम तिथि को इंगित करने से बचने के लिए यह कोशिश कर सकते हैं और यदि वर्तमान माह की आरंभ और समाप्ति तिथियों को प्रदर्शित करने की आवश्यकता है:
LocalDate start = LocalDate.now().minusDays(LocalDate.now().getDayOfMonth()-1);
LocalDate end = LocalDate.now().minusDays(LocalDate.now().getDayOfMonth()).plusMonths(1);
System.out.println("Start of month: " + start);
System.out.println("End of month: " + end);
परिणाम:
> Start of month: 2019-12-01
> End of month: 2019-12-30
इसे इस्तेमाल करे:
LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.withDayOfMonth(initial.getMonthOfYear().getLastDayOfMonth(false));
System.out.println(start);
System.out.println(end);
आप इच्छा उत्पादन पा सकते हैं, लेकिन getLastDayOfMonth पद्धति के लिए पैरामीटर सही / गलत का ध्यान रखने की आवश्यकता है
वह पैरामीटर लीप वर्ष को दर्शाता है
getLastDayOfMonth
- एक सरल दृष्टिकोण के लिए मेरा जवाब देखें।
यदि आप इसे केवल LocalDate- श्रेणी के साथ करना चाहते हैं:
LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = LocalDate.of(initial.getYear(), initial.getMonthValue(),1);
// Idea: the last day is the same as the first day of next month minus one day.
LocalDate end = LocalDate.of(initial.getYear(), initial.getMonthValue(), 1).plusMonths(1).minusDays(1);
बस यहाँ @herman समाधान के लिए मेरे कार्यान्वयन को दिखाने के लिए
ZoneId americaLaPazZone = ZoneId.of("UTC-04:00");
static Date firstDateOfMonth(Date date) {
LocalDate localDate = convertToLocalDateWithTimezone(date);
YearMonth baseMonth = YearMonth.from(localDate);
LocalDateTime initialDate = baseMonth.atDay(firstDayOfMonth).atStartOfDay();
return Date.from(initialDate.atZone(americaLaPazZone).toInstant());
}
static Date lastDateOfMonth(Date date) {
LocalDate localDate = convertToLocalDateWithTimezone(date);
YearMonth baseMonth = YearMonth.from(localDate);
LocalDateTime lastDate = baseMonth.atEndOfMonth().atTime(23, 59, 59);
return Date.from(lastDate.atZone(americaLaPazZone).toInstant());
}
static LocalDate convertToLocalDateWithTimezone(Date date) {
return LocalDateTime.from(date.toInstant().atZone(americaLaPazZone)).toLocalDate();
}
LocalDateTime
यहाँ उपयोग करने के लिए गलत वर्ग है। आप मूल्यवान ज़ोन / ऑफ़सेट जानकारी त्याग रहे हैं।
Date
का प्रश्न से कोई लेना-देना नहीं है, और आमतौर पर इससे बचना चाहिए।
ZoneId.of("America/La_Paz")
। वर्तमान तारीखों के लिए यह एक ही परिणाम देगा, लेकिन शायद भविष्य में ऐतिहासिक तारीखों या तारीखों के लिए नहीं।