তিন মাসের স্থানীয়, তারিখ ব্যবহার করে মাসের প্রথম এবং শেষ দিনটি পান


127

আমার একটি লোকাল ডেট রয়েছে যা মাসের প্রথম এবং শেষ দিনটি পাওয়া দরকার। আমি কেমন করে ঐটি করি?

যেমন। 13/2/2014 আমি পেতে প্রয়োজন 1/2/2014এবং 28/2/2014যে LOCALDATE ফরম্যাটের।

থ্রিটেন লোকালডেট ক্লাস ব্যবহার করা।

উত্তর:


180

কেবল ব্যবহার করুন withDayOfMonthএবং lengthOfMonth():

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.withDayOfMonth(initial.lengthOfMonth());

3
এফওয়াইআই অন্যান্য উত্তরগুলি দেখুন
অ্যাসিলেয়াস

147

ব্যবসায়ের প্রয়োজনীয়তার সাথে ঘনিষ্ঠভাবে মেলে এমন একটি সমাধান সমর্থন করার জন্য এপিআই ডিজাইন করা হয়েছিল

import static java.time.temporal.TemporalAdjusters.*;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.with(firstDayOfMonth());
LocalDate end = initial.with(lastDayOfMonth());

তবে জনের সমাধানগুলিও ঠিক আছে।


5
এটির সাথে যেতেই, এই বিশেষ সমস্যাটি হ্যান্ডেল করার জন্য বিশেষভাবে তৈরি করা API সংস্থানগুলি ব্যবহার করে।
jpangamarca

87

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();

8
সবার সেরা সমাধান।
আগুস্তে সানচেজ

অতিরিক্ত তথ্য: YearMonth YearMonth = YearMonth.parse ("202004", ডেটটাইম ফরমেটার.ওফ্যাটার্ন ("yyyymm"));
Egemen

LocalDate withপদ্ধতির তুলনায় এর সুবিধা কী কী ?
অ্যান্ড্রুব্লুম

@ অ্যান্ড্রুব্লুম আপনাকে মাসের শেষ দিন পেতে কোনও স্ট্যাটিক ফাংশন ব্যবহার করার দরকার নেই, এবং কমপক্ষে দ্বিতীয় উদাহরণে আপনার কোনও LocalDateসূচনা করার দরকার নেই।
হারমান

18

জন স্কিটির উত্তরটি সঠিক এবং আমার উত্সাহের যোগ্য হয়েছে, সম্পূর্ণতার জন্য এই সামান্য ভিন্ন সমাধানটি যুক্ত করেছে:

import static java.time.temporal.TemporalAdjusters.lastDayOfMonth;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.with(lastDayOfMonth());

2
প্রিয় ডাউনভোটার, সত্যই, আমি ডাউনটা জানি না কারণ আমার উত্তর জোডাস্টেফেনের একদিন আগেও ছিল এবং মূলত আকর্ষণীয় নতুন অংশটির দিকে ইঙ্গিত করেছিল, অর্থাত্ মাসের শেষে টেম্পোরাল অ্যাডজাস্টার। তা হ'ল আমি অন্য কারও কাছ থেকে উত্তরটি "অনুলিপি" করিনি।
মেনো হচসচাইল্ড

দুর্দান্ত উত্তর! এই সমাধানটি আরও ভাল কারণ এটি ডক্সে সুপারিশ করা হয়েছে : "... মাসের প্রথম বা শেষ দিন সন্ধান করা"
পিটারচাউলা

4

কেউ যদি এ খুঁজছেন আসে পূর্ববর্তী মাসের প্রথম দিনে এবং পূর্ববর্তী মাসের শেষ দিন :

public static LocalDate firstDayOfPreviousMonth(LocalDate date) {
        return date.minusMonths(1).withDayOfMonth(1);
    }


public static LocalDate lastDayOfPreviousMonth(LocalDate date) {
        return date.withDayOfMonth(1).minusDays(1);
    }

ভাল কোড, তবে স্ট্যাক ওভারফ্লোতে একটি উত্তরের প্রশ্নের সুনির্দিষ্ট বিষয়গুলি সম্বোধন করা উচিত।
বাসিল বাউর্কে

ধন্যবাদ, আমি একমত। কখনও কখনও আমরা থ্রেডে সম্পর্কিত কোডটি পাই, কারণ আমি এটিও অনুসন্ধান করতে এসেছি। আমি কেবল এটি ব্যবহারকারীর জন্য রেখেছি। আশা করি ঠিক আছে। ধন্যবাদ।
অনিল ভাস্কর

3
 LocalDate monthstart = LocalDate.of(year,month,1);
 LocalDate monthend = monthstart.plusDays(monthstart.lengthOfMonth()-1);

দয়া করে আপনার উত্তরটি বর্ণনা করুন
১:

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

1
এটা আমার কাছে কিছুটা জটিল মনে হয়েছে। এটি সঠিক ফলাফলও দেয় না। এই মাসের শেষ দিনটি 2019-12-31, তবে আপনার স্নিপেটটি 2019-12-30 মুদ্রিত।
ওলে ভিভি

0

এটা চেষ্টা কর:

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- একটি সহজ পদ্ধতির জন্য আমার উত্তর দেখুন।
জন স্কিটি

0

আপনি যদি কেবল স্থানীয় তারিখ-শ্রেণীর সাথে এটি করতে চান তবে:

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);

0

@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এখানে হ'ল ভুল ক্লাসটি ব্যবহার করা। আপনি মূল্যবান অঞ্চল / অফসেট তথ্য বাতিল করছেন।
বেসিল Bourque

প্রশ্নটি এখানে তারিখের সাথে তারিখের সাথে নয়, কেবলমাত্র তারিখের মানের জন্য জিজ্ঞাসা করে। এবং ভয়ানক উত্তরাধিকার শ্রেণীর Dateপ্রশ্নটির সাথে কোনও সম্পর্ক নেই এবং সাধারণত এড়ানো উচিত।
বেসিল Bourque

1
লা পাজ সময় অঞ্চলের জন্য দয়া করে আরও সঠিক ব্যবহার করুন ZoneId.of("America/La_Paz")। বর্তমানের তারিখগুলির জন্য এটি একই ফলাফল দেবে, তবে সম্ভবত ভবিষ্যতে historicতিহাসিক তারিখ বা তারিখের জন্য নয়।
ওলে ভিভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.