আমার একটি লোকাল ডেট রয়েছে যা মাসের প্রথম এবং শেষ দিনটি পাওয়া দরকার। আমি কেমন করে ঐটি করি?
যেমন। 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 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")
। বর্তমানের তারিখগুলির জন্য এটি একই ফলাফল দেবে, তবে সম্ভবত ভবিষ্যতে historicতিহাসিক তারিখ বা তারিখের জন্য নয়।