আমি উভয়ের মধ্যে পার্থক্য গণনা করার চেষ্টা করছি LocalDateTime
।
আউটপুটটি বিন্যাসের হওয়া দরকার y years m months d days h hours m minutes s seconds
। আমি যা লিখেছি তা এখানে:
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;
public class Main {
static final int MINUTES_PER_HOUR = 60;
static final int SECONDS_PER_MINUTE = 60;
static final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;
public static void main(String[] args) {
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
Period period = getPeriod(fromDateTime, toDateTime);
long time[] = getTime(fromDateTime, toDateTime);
System.out.println(period.getYears() + " years " +
period.getMonths() + " months " +
period.getDays() + " days " +
time[0] + " hours " +
time[1] + " minutes " +
time[2] + " seconds.");
}
private static Period getPeriod(LocalDateTime dob, LocalDateTime now) {
return Period.between(dob.toLocalDate(), now.toLocalDate());
}
private static long[] getTime(LocalDateTime dob, LocalDateTime now) {
LocalDateTime today = LocalDateTime.of(now.getYear(),
now.getMonthValue(), now.getDayOfMonth(), dob.getHour(), dob.getMinute(), dob.getSecond());
Duration duration = Duration.between(today, now);
long seconds = duration.getSeconds();
long hours = seconds / SECONDS_PER_HOUR;
long minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
long secs = (seconds % SECONDS_PER_MINUTE);
return new long[]{hours, minutes, secs};
}
}
আমি যে আউটপুট পাচ্ছি তা হ'ল 29 years 8 months 24 days 12 hours 0 minutes 50 seconds
। আমি এই ওয়েবসাইটটি (মান 12/16/1984 07:45:55
এবং সহ 09/09/2014 19:46:45
) থেকে আমার ফলাফল পরীক্ষা করেছি । নিম্নলিখিত স্ক্রিনশট আউটপুট দেখায়:
আমি নিশ্চিত যে মাসের মানের পরে ক্ষেত্রগুলি আমার কোড থেকে ভুল হয়ে আসছে am কোন পরামর্শ খুব সহায়ক হবে।
হালনাগাদ
আমি অন্য ওয়েবসাইট থেকে আমার ফলাফলটি পরীক্ষা করে দেখেছি যে ফলাফলটি ভিন্ন। এটি এখানে: দুটি তারিখের মধ্যে সময়কাল গণনা করুন (ফলাফল: 29 বছর, 8 মাস, 24 দিন, 12 ঘন্টা, 0 মিনিট এবং 50 সেকেন্ড)।
হালনাগাদ
যেহেতু আমি দুটি ভিন্ন সাইট থেকে দুটি পৃথক ফলাফল পেয়েছি, তাই আমি ভাবছি যে আমার গণনার অ্যালগোরিদম বৈধ কিনা। আমি যদি নিম্নলিখিত দুটি LocalDateTime
বস্তু ব্যবহার করি :
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 10, 6, 40, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
তারপরে আউটপুট আসছে: 29 years 8 months 25 days -1 hours -5 minutes -10 seconds.
এই লিঙ্ক থেকে এটি হওয়া উচিত 29 years 8 months 24 days 22 hours, 54 minutes and 50 seconds
। সুতরাং অ্যালগরিদমকেও নেতিবাচক সংখ্যাগুলি পরিচালনা করতে হবে।
প্রশ্নটি নোট করুন কোন সাইটটি আমাকে কী ফলাফল দিয়েছে সে সম্পর্কে নয়, আমার সঠিক অ্যালগরিদমটি জানতে হবে এবং সঠিক ফলাফল হওয়া দরকার।
7:45:55
এবং শেষ সময় 19:46:45
(বা 7:46:45
প্রধানমন্ত্রী) পাবেন। সুতরাং এই দুটি সময়ের মধ্যে পার্থক্য হল 12 ঘন্টা, 0 মিনিট এবং 50 সেকেন্ড এবং কখনই 23 ঘন্টা, 34 মিনিট এবং 12 সেকেন্ড। সুতরাং আপনার গণনাটি বাস্তবে সঠিক বলে মনে হচ্ছে, কমপক্ষে সময় অংশে।
LocalDateTime
কোনও টাইম অঞ্চল নেই, তাই কোনও অনন্য উত্তর নাও থাকতে পারে। এমনকি যদি আপনি ধরে নেন যে শুরু এবং শেষ সময় অঞ্চলগুলি একই রকম হয় তবে নির্দিষ্ট জোনগুলিতে 2014-09-09 যেমন দিবালোক সংরক্ষণের সময় বা গ্রীষ্মকালীন সময় এবং অন্যগুলিতে তা না হয় dates এটি এক ঘন্টার মধ্যে জিনিসগুলি ফেলে দিতে পারে। সুতরাং এটির সমাধান না হলে পার্থক্যটিকে দ্বিতীয়টিতে গণনা করা অর্থহীন।
LocalDateTime
শ্রেণিটি উদ্দেশ্যমূলকভাবে সময় অঞ্চল বা অফসেট-ইউটিসি-র কোনও ধারণার অভাব অনুসারে অবাস্তব ফলাফল ব্যবহার করে? বাস্তবসম্মত মানগুলির জন্য, ZoneId
ব্যবহারের মাধ্যমে একটি সময় অঞ্চল নির্ধারণ করুন ZonedDateTime
।
Period.between()
কিছু বৃত্তাকার প্রয়োগ করতে পারে?