Java LocalDateTime පැහැදිලි කිරීම: මූලික කරුණු, ආකෘතිකරණය, විග්‍රහය, සහ ප්‍රායෝගික භාවිතය

目次

1. ඉලක්ක ප්‍රේක්ෂකයන් සහ ඔබ ඉගෙන ගන්නා දේ

ඔබ Java හි දිනයන් සහ වේලාවන් සමඟ වැඩ කරන විට LocalDateTime පන්තිය භාවිතා කිරීමේදී කිසිදා හෝ ගැටළුවක් දැනුනද? මෙම ලිපිය Java ආරම්භකයන් සිට ව්‍යාපාරික පද්ධති සක්‍රියව සංවර්ධනය කරන ඉංජිනේරුවන් දක්වා සියලු දෙනා සඳහා නිර්මාණය කර ඇති අතර, LocalDateTime හි මූලික කරුණු සිට ප්‍රායෝගික, සැබෑ-ලෝක භාවිතය දක්වා සියල්ල විස්තරාත්මකව පැහැදිලි කරයි.

මෙම ලිපියෙන් ඔබට ලැබෙන දේ

  • LocalDateTime හි මූලික ව්‍යුහය සහ ලක්ෂණ තේරුම් ගැනීම
  • කොන්ක්‍රීට් උදාහරණ මඟින් දිනයන් සහ වේලාවන් නිර්මාණය, පරිවර්තනය, ආකෘතිකරණය සහ ගණිත ක්‍රියාකාරකම් කිරීම ඉගෙන ගැනීම
  • LocalDateTime සහ පරණ API (Date සහ Calendar) අතර වෙනස්කම් සහ ඒවා කවදා භාවිතා කළ යුතුදැයි තේරුම් ගැනීම
  • දත්ත ගබඩා ඒකාබද්ධ කිරීම සහ නිතර හමුවන දෝෂ වැනි සාමාන්‍ය භාවිත අවස්ථා කළමනාකරණය කිරීම ඉගෙන ගැනීම
  • සංවර්ධනයේ සාමාන්‍ය වැරදි වලින් වැළැක්වීම සහ දිනය-වේලාව තර්කය කාර්යක්ෂමව හා ආරක්ෂිතව කළමනාකරණය කිරීම

පහත සඳහන් පාඨකයන් සඳහා නිර්දේශිතයි

  • Java හි දිනයන් සහ වේලාවන් ආරක්ෂිතව සහ පිරිසිදු ලෙස කළමනාකරණය කිරීමට කැමති සංවර්ධකයන්
  • LocalDateTime සම්පූර්ණයෙන්ම අධික්ෂේප කිරීමට කැමති අය
  • පද්ධති සැලසුම් සහ සංවර්ධනය සඳහා දිනය-වේලාව කළමනාකරණයේ හොඳම ක්‍රමෝපායන් සොයන ඉංජිනේරුවන්
  • MySQL හෝ PostgreSQL වැනි දත්ත ගබඩා සමඟ වැඩ කරන සංවර්ධකයන්
  • පරණ API (Date / Calendar) වලින් මාරු වීමට ගැටළුවක් දැනෙන ඕනෑම කෙනෙකු

මෙම ලිපිය කියවීමෙන්, Java හි දිනය සහ වේලාව කළමනාකරණය ගැන කනස්සල්ලෙන් තොරව අවශ්‍ය දැනුම සහ විශ්වාසය ඔබට ලැබේ. දැන් LocalDateTime හි මූලික කරුණු සහ එය සාමාන්‍යයෙන් සසඳන අනෙකුත් පන්තීන් සමඟ කෙසේ වෙනස් වේදැයි පැහැදිලි කරමු.

2. LocalDateTime යනු කුමක්ද? මූලික කරුණු සහ අනෙකුත් පන්තීන් සමඟ වෙනස්කම්

LocalDateTime හි මූලික සමාලෝචනය

LocalDateTime යනු Java 8 හි java.time පැකේජය යටතේ හඳුන්වා දී ඇති නවීන දිනය-වේලාව API එකේ කොටසකි. එහි ප්‍රධාන ලක්ෂණය වන්නේ දිනය සහ වේලාව එකවර කළමනාකරණය කිරීමයි, වසර, මාස, දිනය, පැය, මිනිත්තුව, තත්පරය සහ නැනෝසෙකන්ඩ් දක්වා අගයන් සුරකින්න.

java.util.Date සහ Calendar වැනි පරණ API වලට වඩා, LocalDateTime හි කාල කලාප තොරතුරු අඩංගු නොවේ. එය කාල කලාපයන් අදාළ නොවන, උදාහරණයක් ලෙස “2025 ජූලි 10, 15:30:00” වැනි සැලසුම් කර ඇති සිදුවීමක් හෝ ලේඛනයක් පෙන්වීමට සුදුසු වේ.

තවත් වැදගත් ලක්ෂණයක් වන්නේ LocalDateTime අවලංගු නොවන (immutable) සහ තන්තුව-ආරක්ෂිත (thread-safe) බවයි. ඕනෑම වෙනස්කමක් නව උදාහරණයක් ලෙස ලබා දේ, එමනිසා බහු-තන්තුව පරිසරවල භාවිතයට ආරක්ෂිත වේ.

පරණ API සහ අනෙකුත් දිනය-වේලාව පන්තීන් සමඟ වෙනස්කම්

Java විවිධ දිනය-වේලාව පන්තීන් ලබා දේ, එක් එක් පන්තිය වෙනත් අරමුණක් සඳහා සේවය කරයි. පහත වගුව ඒවායේ වෙනස්කම් සහ සාමාන්‍ය භාවිත අවස්ථා සාරාංශ කරයි.

ClassTime ZoneManaged DataMain Use Case
LocalDateTimeNoDate and timeRepresenting local date-time values
LocalDateNoDate onlyWhen only the date is needed
LocalTimeNoTime onlyWhen only the time is needed
ZonedDateTimeYesDate, time, and time zoneWhen explicit time zone handling is required
OffsetDateTimeYes (e.g., +09:00)Date, time, and offsetAPIs or systems sensitive to time differences
Date / CalendarVariesDate and timeLegacy APIs (not recommended today)

ප්‍රධාන කරුණු

  • කාල කලාපයන් වැදගත් වන විට ZonedDateTime හෝ OffsetDateTime භාවිතා කරන්න
  • ඔබට දිනය හෝ වේලාව පමණක් අවශ්‍ය නම් LocalDate හෝ LocalTime භාවිතා කරන්න
  • කාල කලාප නොමැතිව ස්ථානීය දිනය සහ වේලාව කළමනාකරණය කිරීමේදී LocalDateTime භාවිතා කරන්න

LocalDateTime සඳහා සාමාන්‍ය භාවිත අවස්ථා

  • කාලසටහන් පද්ධති සහ කාර්ය අවසන් දිනයන්
  • ස්ථානීය වේලාවේ ලොග් කිරීම සහ පරීක්ෂණ ලේඛන
  • දත්ත ගබඩා DATETIME තීරුවල සමඟ ඒකාබද්ධ කිරීම

වෙනත් ප්‍රදේශවල සේවාදායකයන් හෝ පරිශීලකයන් අතර වැඩ කරන විට, කාල කලාප කළමනාකරණය අත්‍යවශ්‍ය වේ. එවැනි අවස්ථාවල ZonedDateTime භාවිතා කිරීම සලකා බලන්න.

3. LocalDateTime උදාහරණ නිර්මාණය කිරීම (කේත උදාහරණ සමඟ)

LocalDateTime සමඟ ආරම්භ කරන විට, පළමු ඉගෙන ගැනීමට ඇති දේ උදාහරණ නිර්මාණය කිරීමයි. මෙම කොටස සාමාන්‍යයෙන් භාවිතා වන නිර්මාණ ක්‍රමයන් ප්‍රායෝගික උදාහරණ සමඟ හඳුන්වා දෙයි.

3-1. වත්මන් දිනය සහ වේලාව ලබා ගැනීම (now)

සරලම භාවිතය වත්මන් ස්ථානීය දිනය සහ වේලාව ලබා ගැනීමයි. කාල කලාපයක් ඇතුළත් නොවූවත්, අගය පද්ධතියේ පෙරනිමි කාල කලාපය මත පදනම් වේ.

import java.time.LocalDateTime;

LocalDateTime now = LocalDateTime.now();
System.out.println(now); // Example: 2025-07-10T15:30:45.123

3-2. නියමිත දිනය සහ වේලාව නිර්මාණය කිරීම (of)

විශේෂිත දිනයක් සහ වේලාවක් සෑදීමට, of() ක්‍රමය භාවිතා කරන්න. ඔබට තත්පර සහ නැනෝසෙකන්ඩ් (විකල්ප) දක්වා අගයන් නියම කළ හැක.

LocalDateTime dateTime = LocalDateTime.of(2025, 7, 10, 15, 30, 0);
System.out.println(dateTime); // 2025-07-10T15:30

3-3. ස්ට්‍රින්ග් එකකින් සෑදීම (parse)

LocalDateTime, ISO-8601 ආකෘතියේ (උදාහරණයක්: "2025-07-10T15:30:00") හෝ අභිරුචි ආකෘති වලින් ස්ට්‍රින්ග් මගින්ද සෑදිය හැක.

ස්ථාන්‍ය ISO ආකෘතිය භාවිතා කිරීම:

LocalDateTime parsed = LocalDateTime.parse("2025-07-10T15:30:00");
System.out.println(parsed); // 2025-07-10T15:30

අභිරුචි ආකෘතියක් (DateTimeFormatter සමඟ) භාවිතා කිරීම:

import java.time.format.DateTimeFormatter;

String input = "2025/07/10 15:30:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime parsedCustom = LocalDateTime.parse(input, formatter);
System.out.println(parsedCustom); // 2025-07-10T15:30

3-4. සාමාන්‍ය දෝෂය: DateTimeParseException

parse() භාවිතා කරන විට සාමාන්‍යයෙන් හමුවන දෝෂයක් DateTimeParseException වේ. ප්‍රධාන හේතුව ඇතුළත් ස්ට්‍රින්ග් ආකෘතිය සහ Formatter අතර නොගැළපීමයි.

උදාහරණය:

LocalDateTime.parse("2025/07/10 15:30:00");
// Error: not in ISO-8601 format

විසඳුම:

  • ආකෘතිය ISO-8601 නොවන විට සෑම විටම DateTimeFormatter එකක් නියම කරන්න.
  • හැකි තරම් පෙර ඇතුළත් ස්ට්‍රින්ග් වල සත්‍යාපනය කරන්න.

සාරාංශය

  • වත්මන් දිනය සහ වේලාව සඳහා LocalDateTime.now() භාවිතා කරන්න
  • of() භාවිතා කර විශේෂිත දිනය-වේලාවක් සෑදන්න
  • ස්ට්‍රින්ග් සඳහා DateTimeFormatter සමඟ parse() භාවිතා කරන්න
  • පාර්ස් කිරීමේ දෝෂ වලින් වැළැක්වීමට ආකෘති සමාන්‍යතාවය තහවුරු කරන්න

4. LocalDateTime ආකෘතිකරණය සහ ස්ට්‍රින්ග් වෙත පරිවර්තනය

Java හි දිනය සහ වේලාව දත්ත සැකසීමේදී, දර්ශන ආකෘති සහ ඇතුළත්/පිටත ආකෘති පිළිබඳව අවධානය යොමු කළ යුතුය. LocalDateTime පෙරනිමි ලෙස ISO-8601 ආකෘතිය (උදාහරණයක්: 2025-07-10T15:30:00) ප්‍රතිදානය කරන නමුත්, වාස්තුකාලීන යෙදුම් බොහෝවිට අභිරුචි ආකෘති අවශ්‍ය කරයි. මෙම කොටස LocalDateTime අගයන් ආකෘතිකරණය කිරීම සහ අවධානය යොමු කළ යුතු කරුණු පැහැදිලි කරයි.

4-1. පෙරනිමි ප්‍රතිදානය සහ ISO-8601 ආකෘතිය

System.out.println() භාවිතා කර LocalDateTime අවස්ථාවක් සෘජුව ප්‍රින්ට් කරන විට, එය ISO-8601 ආකෘතිය YYYY-MM-DDTHH:MM:SS ලෙස පෙන්වයි. T අක්ෂරය දිනය සහ වේලාව අතර වෙන්කරන්නා ලෙස ISO ප්‍රමිතියෙන් නියම කර ඇත.

LocalDateTime now = LocalDateTime.now();
System.out.println(now); // Example: 2025-07-10T15:30:45.123

4-2. අභිරුචි ආකෘති වෙත පරිවර්තනය (DateTimeFormatter භාවිතා කිරීම)

ව්‍යාපාරික යෙදුම් සහ දත්ත ගබඩා ඒකාබද්ධ කිරීමේදී, අභිරුචි හෝ ප්‍රදේශ-විශේෂ ආකෘති අවශ්‍ය විය හැක. එවැනි අවස්ථාවල DateTimeFormatter පන්තිය භාවිතා කරන්න.

උදාහරණය: ජපානයේ සාමාන්‍යයෙන් භාවිතා වන රටාව

import java.time.format.DateTimeFormatter;

LocalDateTime dateTime = LocalDateTime.of(2025, 7, 10, 15, 30, 0);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String formatted = dateTime.format(formatter);

System.out.println(formatted); // 2025/07/10 15:30:00

ඔබට පහත ආකාරයන් වැනි අභිරුචි ආකෘති නිර්මාණය කළ හැක:

  • "yyyy年MM月dd日 HH時mm分ss秒"
  • "yyyyMMdd_HHmmss"

4-3. ප්‍රතිදානයේ “T” අඩංගු වන අවස්ථා සහ නොවන අවස්ථා

  • toString() හෝ DateTimeFormatter.ISO_LOCAL_DATE_TIME භාවිතා කරන විට “T” පෙන්වයි.
  • අභිරුචි ආකෘති රටාවක් නියම කිරීමෙන් “T” ඉවත් කළ හැක.

උදාහරණය: “T” නොමැති ප්‍රතිදානය

DateTimeFormatter noT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dateTime.format(noT)); // 2025-07-10 15:30:00

4-4. ස්ට්‍රින්ග් නැවත LocalDateTime වෙත පරිවර්තනය

කොටස 3 හි සඳහන් පරිදි, අභිරුචි ආකෘතියකින් ස්ට්‍රින්ග් එකක් LocalDateTime වෙත නැවත පරිවර්තනය කිරීම සඳහා DateTimeFormatter සමඟ parse() භාවිතා කළ යුතුය.

String input = "2025/07/10 15:30:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime parsed = LocalDateTime.parse(input, formatter);
System.out.println(parsed); // 2025-07-10T15:30

සාරාංශය

  • පෙරනිමි ප්‍රතිදානය ISO-8601 (“T” සමඟ) අනුගමනය කරයි
  • DateTimeFormatter භාවිතා කර අභිරුචි ප්‍රතිදාන ආකෘති සඳහා
  • ආකෘතිකාරක (formatters) භාවිතා කර String ගණනාවන් LocalDateTime වෙත ආරක්ෂිතව විග්‍රහ කරන්න
  • ව්‍යාපාරික සහ ඒකාබද්ධ කිරීමේ අවශ්‍යතා සපුරාලීමට ආකෘති සවිස්තරාත්මකව අභිරුචි කරගන්න

5. දිනයන් සහ වේලාවන් එකතු කිරීම, අඩු කිරීම, සහ සංසන්දනය (ප්‍රායෝගිකව සාමාන්‍යය)

ආදර්ශ ලෝක යෙදුම් වල, “කීප දින පසු දිනයක් ගණනය කිරීම” හෝ “දෙකේ දිනය-වේලාව අගයන් සංසන්දනය කිරීම” වැනි ක්‍රියාකාරකම් සිදු කිරීම සාමාන්‍යය වේ. LocalDateTime මෙම ක්‍රියාකාරකම් සඳහා අවබෝධය සපයන API ලබා දේ.

5-1. දිනය-වේලාව අගයන් එකතු කිරීම සහ අඩු කිරීම (plus / minus)

LocalDateTime වේලාව ඒකක එකතු කිරීම සහ අඩු කිරීම සඳහා සම්පූර්ණ ක්‍රම මාලාවක් ලබා දේ. පහත සාමාන්‍යයෙන් භාවිතා වන උදාහරණ කිහිපයක් ඇත.

එකතු කිරීමේ උදාහරණ:

LocalDateTime base = LocalDateTime.of(2025, 7, 10, 15, 30, 0);
LocalDateTime plusDays = base.plusDays(5);        // 5 days later
LocalDateTime plusHours = base.plusHours(3);      // 3 hours later
LocalDateTime plusMonths = base.plusMonths(1);    // 1 month later

System.out.println(plusDays);   // 2025-07-15T15:30
System.out.println(plusHours);  // 2025-07-10T18:30
System.out.println(plusMonths); // 2025-08-10T15:30

අඩු කිරීමේ උදාහරණ:

LocalDateTime minusDays = base.minusDays(2);        // 2 days earlier
LocalDateTime minusMinutes = base.minusMinutes(45); // 45 minutes earlier

System.out.println(minusDays);    // 2025-07-08T15:30
System.out.println(minusMinutes); // 2025-07-10T14:45

5-2. දිනය-වේලාව අගයන් සංසන්දනය (isBefore, isAfter, equals)

එක් දිනය-වේලාව තවත් එකකට පෙර, පසු, හෝ සමානදැයි තීරණය කිරීමට, පහත ක්‍රම භාවිතා කරන්න.

LocalDateTime a = LocalDateTime.of(2025, 7, 10, 10, 0, 0);
LocalDateTime b = LocalDateTime.of(2025, 7, 10, 15, 0, 0);

System.out.println(a.isBefore(b)); // true
System.out.println(a.isAfter(b));  // false
System.out.println(a.equals(b));   // false

5-3. වෙනස්කම් ගණනය කිරීම (Duration vs Period)

ඔබට දෙකේ දිනය-වේලාව අගයන් අතර වෙනස්කම ගණනය කිරීමට අවශ්‍ය නම්, ඔබ මැනීමට කැමති දේ අනුව Duration සහ Period අතර තේරීම කරන්න.

  • Duration : වේලාව-අධාරිත වෙනස්කම් සඳහා (තත්පර, මිනිත්තු, පැය)
  • Period : දිනය-අධාරිත වෙනස්කම් සඳහා (අවුරුදු, මාස, දින)

උදාහරණය: Duration (වේලාව වෙනස්කම)

import java.time.Duration;

LocalDateTime start = LocalDateTime.of(2025, 7, 10, 10, 0, 0);
LocalDateTime end = LocalDateTime.of(2025, 7, 10, 15, 0, 0);

Duration duration = Duration.between(start, end);
System.out.println(duration.toHours());   // 5
System.out.println(duration.toMinutes()); // 300

උදාහරණය: Period (දිනය වෙනස්කම)

import java.time.Period;

LocalDateTime dateTime1 = LocalDateTime.of(2025, 7, 10, 0, 0, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2025, 8, 5, 0, 0, 0);

// Convert to LocalDate before calculating the difference
Period period = Period.between(dateTime1.toLocalDate(), dateTime2.toLocalDate());
System.out.println(period.getMonths()); // 0
System.out.println(period.getDays());   // 26

සාරාංශය

  • plus සහ minus භාවිතා කර සුළු ගණිත ක්‍රියාකාරකම් කරන්න
  • isBefore සහ isAfter භාවිතා කර දිනය-වේලාව අගයන් සංසන්දනය කරන්න
  • Duration භාවිතා කර වේලාව-අධාරිත වෙනස්කම්, Period භාවිතා කර දිනය-අධාරිත වෙනස්කම්
  • මෙම API එකතු කිරීමෙන් ව්‍යාපාරික තර්කය පිරිසිදු සහ කියවීමට පහසු වේ

6. LocalDateTime වෙනත් පන්තීන් සහ දත්ත ගබඩා වර්ග සමඟ පරිවර්තනය කිරීම

ව්‍යාපාරික පද්ධති හෝ පවතින යෙදුම් සමඟ ඒකාබද්ධ කිරීමේදී, LocalDateTime වෙනත් දිනය-වේලාව පන්තීන් හෝ දත්ත ගබඩා වර්ග වෙත පරිවර්තනය කිරීම සාමාන්‍යය වේ. මෙම කොටස සාමාන්‍යයෙන් භාවිතා වන පරිවර්තන රටා සහ සැලකිලිමත් විය යුතු වැදගත් කරුණු සාරාංශ කරයි.

6-1. LocalDate සහ LocalTime අතර පරිවර්තනය

LocalDateTime දිනය සහ වේලාව දෙකම නියෝජනය කරන අතර, ඔබට දිනය පමණක් හෝ වේලාව පමණක් කළමනාකරණය කළ යුතු අවස්ථා බොහෝමයක් ඇත.

LocalDateTime → LocalDate / LocalTime

LocalDateTime dateTime = LocalDateTime.of(2025, 7, 10, 15, 30, 0);

LocalDate date = dateTime.toLocalDate();
LocalTime time = dateTime.toLocalTime();

System.out.println(date); // 2025-07-10
System.out.println(time); // 15:30

LocalDate / LocalTime → LocalDateTime

LocalDate date = LocalDate.of(2025, 7, 10);
LocalTime time = LocalTime.of(15, 30);

LocalDateTime dateTime = LocalDateTime.of(date, time);
System.out.println(dateTime); // 2025-07-10T15:30

6-2. Converting with java.util.Date, Calendar, and java.sql.Timestamp

When working with legacy APIs or JDBC, you may need to convert between LocalDateTime and older date-time types such as Date or Timestamp.

LocalDateTime → java.sql.Timestamp

import java.sql.Timestamp;
import java.time.LocalDateTime;

LocalDateTime dateTime = LocalDateTime.now();
Timestamp timestamp = Timestamp.valueOf(dateTime);
System.out.println(timestamp); // Example: 2025-07-10 15:30:00.123

java.sql.Timestamp → LocalDateTime

Timestamp timestamp = Timestamp.valueOf("2025-07-10 15:30:00");
LocalDateTime dateTime = timestamp.toLocalDateTime();
System.out.println(dateTime); // 2025-07-10T15:30

Converting java.util.Date or Calendar requires an intermediate Instant

Date date = new Date();
LocalDateTime dateTime =
    date.toInstant()
        .atZone(ZoneId.systemDefault())
        .toLocalDateTime();

6-3. Mapping to Database DATETIME Types (MySQL / PostgreSQL)

LocalDateTime works very well with DATETIME columns in MySQL and PostgreSQL. Using JDBC drivers, you can convert smoothly via setTimestamp and getTimestamp.

  • MySQL / PostgreSQL DATETIME ↔ Java LocalDateTime or java.sql.Timestamp
  • When reading: use getTimestamp()toLocalDateTime()
  • When writing: convert with Timestamp.valueOf(LocalDateTime) and use setTimestamp()

Important: Be careful with time zone management

  • DATETIME columns in MySQL and PostgreSQL do not store time zone information.
  • It is critical to keep a consistent time zone policy within the application.
  • If strict time zone control is required, consider TIMESTAMP WITH TIME ZONE or using ZonedDateTime .

6-4. Converting with ZonedDateTime and OffsetDateTime

When time zone information is required, conversions between LocalDateTime and ZonedDateTime are commonly used.

LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zone = ZoneId.of("Asia/Tokyo");

ZonedDateTime zonedDateTime = localDateTime.atZone(zone);
System.out.println(zonedDateTime); // 2025-07-10T15:30+09:00[Asia/Tokyo]

LocalDateTime backToLocal = zonedDateTime.toLocalDateTime();
System.out.println(backToLocal); // 2025-07-10T15:30

Summary

  • LocalDateTime can be easily converted to and from other date-time classes and database types
  • JDBC integration works smoothly via Timestamp
  • Use ZonedDateTime or OffsetDateTime when time zone handling is required
  • Ensure time zone consistency when integrating with databases

7. Practical Use Cases and Quick Reference by Scenario

This section organizes real-world use cases for LocalDateTime and helps you choose the appropriate class depending on the situation.

7-1. Common Practical Use Cases

(1) Task and Schedule Management Systems

LocalDateTime is ideal when managing schedules and deadlines that require both date and time. It allows intuitive handling of task start and end times.

LocalDateTime deadline =
    LocalDateTime.of(2025, 7, 31, 23, 59, 59);

(2) Attendance and Time Tracking

Clock-in and clock-out records require both date and time. Integration with database DATETIME columns is straightforward.

LocalDateTime clockIn = LocalDateTime.now();

(3) Logging and Audit Trails

System logs and error histories often record event timestamps using LocalDateTime. It is suitable when time zone adjustments are unnecessary or logs are internal to the application.

7-2. භාවිතා නඩුව අනුව ඉක්මන් යොමු වගුව

Use CaseRecommended ClassReason
Store local date and timeLocalDateTimeBest choice when time zones are not required
Date onlyLocalDateCalendars, birthdays, etc.
Time onlyLocalTimeAlarms, business hours
Explicit time zone managementZonedDateTimeMulti-region systems
Use UTC or offsetsOffsetDateTimeAPIs and external integrations

7-3. ඔබට වේලා කලාපයක් අවශ්‍ය වන අවස්ථා සහ අවශ්‍ය නොවන අවස්ථා

වේලා කලාපයක් අවශ්‍ය නොවන සාමාන්‍ය නඩු

  • යෙදුමේ ඇතුළත පමණක් භාවිතා වන දිනය-වේලාව අගයන්
  • එකම ස්ථානයේ පද්ධති (උදාහරණයක් ලෙස, දේශීය-පමණ සේවාවන්)

වේලා කලාපයක් අවශ්‍ය වන සාමාන්‍ය නඩු

  • බහු ප්‍රදේශ හෝ ජාත්‍යන්තර පරිශීලකයන් ඇතුළත් පද්ධති
  • වෙනස් වේලා කලාපවල ක්‍රියාත්මක වන සේවාදායකයන්
  • පරිශීලක ස්ථානය අනුව වේලාවන් වෙනස් ලෙස පෙන්වන යෙදුම්

තීරණ මාර්ගෝපදේශය

ඔබට ඔබම අසන්න: “මෙම දිනය-වේලාව කාලයේ සම්පූර්ණ මොහොතක් නියෝජනය කරන්නේද?” එසේ නම්, ZonedDateTime හෝ OffsetDateTime භාවිතා කරන්න.

7-4. සරල පන්තිය තේරීමේ ප්‍රවාහය

  1. දිනය-වේලාවට වේලා කලාප අවබෝධය අවශ්‍යද?
  • ඔව් → ZonedDateTime හෝ OffsetDateTime
  • නැත → පියවර 2 වෙත යන්න
  1. ඔබට දිනය පමණක්, වේලාව පමණක්, නැතහොත් දෙකම අවශ්‍යද?
  • දිනය පමණක් → LocalDate
  • වේලාව පමණක් → LocalTime
  • දිනය සහ වේලාව → LocalDateTime

සාරාංශය

  • LocalDateTime වේලා කලාප නොමැතිව ස්ථානීය දිනය සහ වේලාව කළමනාකරණය කිරීම සඳහා සුදුසුය
  • නිවැරදි පන්තිය තෝරා ගැනීම පද්ධති නිර්මාණය සහ නඩත්තු පහසු කරයි
  • අවශ්‍යතා පැහැදිලිව අවබෝධ කර ගැනීම අනාගත දෝෂ සහ අසමතුලිතතා වැළැක්වීමට උපකාරී වේ

8. පොදු දෝෂ, ගැටළු විසඳුම්, සහ විසඳුම්

LocalDateTime භාවිතා කරන විට, සංවර්ධකයන්ට නැවත නැවත සිදුවන දෝෂ හෝ ගැටළු මූලාශ්‍ර හමුවේ. මෙම කොටස පොදු ගැටළු සහ ඒවායේ විසඳුම් Q&A ආකාරයෙන් සාරාංශ කරයි, ගැටළු උදාවන විට ඔබට ඉක්මනින් ප්‍රතිචාර දීමට හැකියාව ලබා දේ.

Q1. DateTimeParseException සිදුවේ

කාරණය

  • LocalDateTime.parse() වෙත ලබා දෙන 문자열ය අපේක්ෂිත ආකෘතියට නොගැලපේ නම් මෙම අපවාදය සිදුවේ.
  • ISO-8601 ආකෘතියට නොඅනුකූල 문자열 (උදාහරණයක් ලෙස, "2025-07-10T15:30:00" ) සඳහා DateTimeFormatter අවශ්‍ය වේ.

විසඳුම

  • ආකෘතිය ගැලපේදැයි සෑම විටම පරීක්ෂා කර, අවශ්‍ය නම් DateTimeFormatter භාවිතා කරන්න.
    String input = "2025/07/10 15:30:00";
    DateTimeFormatter formatter =
        DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
    LocalDateTime.parse(input, formatter); // OK
    

Q2. NullPointerException ගැන සැලකිල්ලෙන් සිටින්න

කාරණය

  • null LocalDateTime යොමුකිරීමකට ක්‍රමවලට ඇමතුම් කිරීම.

විසඳුම

  • භාවිතා කිරීමට පෙර null අගයන් පරීක්ෂා කරන්න.
  • අගයන් Optional තුළ වැසීමද ප්‍රයෝජනවත් වේ.

Q3. වැරදි වේලා කලාප සැකසීම

කාරණය

  • LocalDateTime වේලා කලාප තොරතුරු ගබඩා නොකරන බැවින්, පද්ධතියේ හෝ දත්ත ගබඩාවේ වේලා කලාප වෙනස්කම් අනපේක්ෂිත ප්‍රතිඵල ලබා දිය හැක.

විසඳුම

  • සේවාදායක සහ දත්ත ගබඩා වේලා කලාප සැකසුම් එකම කරගන්න.
  • වේලා කලාප නිවැරදිභාවය අවශ්‍ය වන විට ZonedDateTime හෝ OffsetDateTime භාවිතා කරන්න.

Q4. දත්ත ගබඩා සමඟ ඒකාබද්ධ කිරීමේදී දිනය-වේලාව අගයන් මාරු වේ

කාරණය

  • දත්ත ගබඩා තීරුවේ වර්ග හෝ වේලා කලාප සැකසුම් සහ Java යෙදුමේ සැකසුම් අතර අසමතුලිතතා.

විසඳුම

  • DATETIME සහ LocalDateTime භාවිතා කරන විට වේලා කලාප මූලධර්මය පැහැදිලිව නියම කරන්න.
  • කඩිනම් නිවැරදිභාවය අවශ්‍ය නම් TIMESTAMP WITH TIME ZONE හෝ ZonedDateTime භාවිතය සලකා බලන්න.

Q5. නිරවද්‍යතාවය අහිමි වීම (මිලිසෙකන්ඩ් / නැනෝසෙකන්ඩ්)

කාරණය

  • සමහර JDBC ධාවක හෝ දත්ත ගබඩා මිලිසෙකන්ඩ් නිරවද්‍යතාවය පමණක් සහය දක්වයි, නැනෝසෙකන්ඩ් කපා හරිනවා.

විසඳුම

  • මෙම නිරවද්‍යතාව අහිමි වීම ඔබේ පද්ධති අවශ්‍යතා සඳහා පිළිගත හැකිදැයි තහවුරු කරන්න.
  • නැනෝසෙකන්ඩ් නිරවද්‍යතාවය අත්‍යවශ්‍ය නම් වෙනත් ක්‍රමයක් භාවිතා කරන්න.

Q6. පරණ API (Date, Calendar) වලින් පරිවර්තනය කිරීමේදී දෝෂ

කාරණය

  • Date හෝ Calendar සෘජුව LocalDateTime වෙත පරිවර්තනය කිරීමට උත්සාහ කිරීම.

විසඳුම

  • සෑම විටම Instant සහ ZoneId හරහා පරිවර්තනය කරන්න.
    Date date = new Date();
    LocalDateTime dateTime =
        date.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDateTime();
    

ප්‍රායෝගික සංවර්ධන උපදෙස්

  • ආකෘතිකරණය, කාල කලාප සහ null පරීක්ෂණ වලට අවධානය යොමු කරන්න බොහෝ ගැටලු වළක්වා ගැනීම සඳහා
  • දත්ත සමුදායන් හෝ වෙනත් පද්ධති සමඟ ඒකාබද්ධ වන විට වර්ගය සහ ගූණාංග ස්ථිරභාවය සැමවිටම සත්‍යාපනය කරන්න
  • දෝෂ සිදු වන විට, ව්‍යතිරේක පණිවිඩ පරීක්ෂා කර ආදාන වටිනාකම්, පරිවර්තන තර්කය සහ පරිසර සැකසුම් පරීක්ෂා කරන්න

9. නිතර අසන ප්‍රශ්න (FAQ)

මෙම කොටස LocalDateTime සම්බන්ධයෙන් සංවර්ධන ක්‍රියාවලියේදී සාමාන්‍යයෙන් ඇතිවන නිතර අසන ප්‍රශ්නවලට පිළිතුරු සපයයි. ගැටලු විසඳීමේදී හෝ පද්ධති සැලසුම් කිරීමේදී එය වේගවත් යොමුකිරීමක් ලෙස භාවිතා කරන්න.

Q1. LocalDateTime කාල කලාප කළමනාකරණය කළ හැකිද?

නැහැ. LocalDateTime කාල කලාප තොරතුරු ගබඩා කරන්නේ නැත. ඔබට කාලයේ සම්පූර්ණ මොහොතවල කළමනාකරණය අවශ්‍ය නම්, ZonedDateTime හෝ OffsetDateTime භාවිතා කරන්න.

Q2. Date / Calendar වෙතින් LocalDateTime වෙත යාමේ ආරක්ෂිතම ක්‍රමය කුමක්ද?

ඔබට Date හෝ Calendar සෘජුව පරිවර්තනය කළ නොහැක. සැමවිටම Instant සහ ZoneId හරහා පරිවර්තනය කරන්න.

Date date = new Date();
LocalDateTime dateTime =
    date.toInstant()
        .atZone(ZoneId.systemDefault())
        .toLocalDateTime();

Q3. ආදේශය සමහර විට “T” අක්ෂරයක් අඩංගු වන්නේ ඇයි?

“T” අක්ෂරය ISO-8601 ප්‍රමිති වෙන්කරුවකි. එය toString() හෝ DateTimeFormatter.ISO_LOCAL_DATE_TIME භාවිතා කරන විට පෙන්වයි. එය ඉවත් කිරීමට, අභිරුචි ආකෘති පට්ටනයක් විශේෂ කරන්න.

Q4. දත්ත සමුදායක වටිනාකම් ගබඩා කිරීමේදී මම කුමන දේවල්ට 주의 කළ යුතුද?

දත්ත සමුදාය DATETIME වර්ගයේ පේළිවල කාල කලාප තොරතුරු ගබඩා කරන්නේ නැත. යෙදුම ස්ථිරවම එක කාල කලාපයක් භාවිතා කරන බව සහතික කරන්න. දැඩි නිරවද්‍යතාවක් අවශ්‍ය නම්, TIMESTAMP WITH TIME ZONE හෝ ZonedDateTime භාවිතා කිරීම සලකා බලන්න.

Q5. LocalDateTime කොපමණ නිරවද්‍යතාවක් සහාය දක්වන්නේ?

LocalDateTime නැනෝ දෙකෙකු (nanosecond) නිරවද්‍යතාව සහාය දක්වයි. කෙසේ වෙතත්, බොහෝ දත්ත සමුදායන් සහ JDBC ඩ්‍රයිවර්වල මිලි දෙකෙකු (milliseconds) පමණක් සහාය දක්වන අතර, එය සියුම් නිරවද්‍යතාව කපා දමයි.

Q6. LocalDateTime දිවා ආලෝක සංරක්ෂණ කාලය (DST) බලපෑමට ලක් වේද?

නැහැ. LocalDateTime තුළම දිවා ආලෝක සංරක්ෂණ සකසුම් යෙදුම් කරන්නේ නැත. DST කළමනාකරණය අවශ්‍ය නම් ZonedDateTime භාවිතා කරන්න.

Q7. මට දිනයක් හෝ කාලයක් පමණක් අවශ්‍ය නම් මම කුමක් භාවිතා කළ යුතුද?

දිනයන් සඳහා පමණක් LocalDate භාවිතා කරන්න සහ කාලයන් සඳහා පමණක් LocalTime භාවිතා කරන්න. දෙකම අවශ්‍ය වන විට LocalDateTime ආදර්ශය.

Q8. මම ව්‍යතිරේක කෙසේ කළ යුතුද?

ව්‍යතිරේක පණිවිඩ පරීක්ෂා කර පහත දේවල් පරීක්ෂා කරන්න:

  • වාක්‍ය රචනා ආකෘති නිවැරදිද යන්න
  • null හෝ නිවැරදි නොවන වටිනාකම් තිබේද යන්න
  • පරිවර්තන පියවර නිවැරදිව ක්‍රියාත්මක වේද යන්න

10. සාරාංශය සහ යොමු සබැඳි

මෙම ලිපිය LocalDateTime හි මූලික දේවල් සිට ප්‍රායෝගික භාවිතය, සාමාන්‍ය දෝෂ සහ නිතර අසන ප්‍රශ්න දක්වා සියල්ල ආවරණය කර ඇත. පහත දී කෙටි සාරාංශයක් සහ තවදුරු ඉගෙනීම සඳහා උපකාරී යොමුකිරීම් ඇත.

10-1. LocalDateTime නිවැරදිව භාවිතා කිරීමේ ප්‍රධාන ඉගෙනීම්

  • LocalDateTime කාල කලාප නොමැති දේශීය දිනය සහ කාලය කළමනාකරණය සඳහා ආරක්ෂිත සහ සරල පන්තියකි. එය ගණිතමය මෙහෙයුම්, ආකෘතිකරණය, සංසන්දනය සහ විශ්ලේෂණය සඳහා පහසුවෙන් සහාය දක්වයි.
  • පද්ධති අවශ්‍යතා මත ගැලපෙන දින-කාල පන්තිය තෝරා ගන්න.
  • දිනයන් සඳහා පමණක් LocalDate භාවිතා කරන්න
  • කාලයන් සඳහා පමණක් LocalTime භාවිතා කරන්න
  • කාල කලාප වැදගත් වන විට ZonedDateTime හෝ OffsetDateTime භාවිතා කරන්න
  • දත්ත සමුදායන් හෝ බාහිර පද්ධති සමඟ ඒකාබද්ධ වන විට කාල කලාප සහ ආකෘති වලට සෘජුව අවධානය යොමු කරන්න.
  • සාමාන්‍ය දෝෂ ඉදිරියේදී තේරුම් ගැනීම ගැටලු වළක්වා ගැනීමට උපකාරී වේ. වේගවත් විසඳුම් සඳහා FAQ සහ ගැටලු විසඳීමේ කොටස් යොමු කරන්න.

10-2. යොමු සබැඳි සහ ලේඛන

10-3. සංවර්ධකයින් සඳහා අවසාන සටහන්

මෙම ලිපියෙන් ලබාගත් දැනුම සමඟ, ඔබට LocalDateTime භාවිතය ගැන තවත් අමාරු නොවිය යුතුය. නව අවශ්‍යතා උදාවන විට, නිතරම නිල ලේඛන සහ විශ්වාසදායක තාක්ෂණික සම්පත් වෙත යොමු වීමෙන් නවතම තොරතුරු ලබාගන්න.

නිවැරදි සංකල්ප සහ හොඳම පුරුදු අනුගමනය කිරීමෙන්, ඔබට Java දිනය‑කාලය සැකසීම ආරක්ෂිත, පිරිසිදු, සහ වාස්තුකලාවට අදාළව නඩත්තු කළ හැකි පද්ධති වලට පරිවර්තනය කළ හැක.