تاریخ و زمان (Java Date)
کار با تاریخ و زمان: مدیریت زمان در دنیای دیجیتال 📅⏰
جاوا هیچ پکیجِ داخلی برای کلاسِ "تاریخ" به صورت پیشفرض ندارد، اما پکیج قدرتمند java.time را برای مدیریت دقیق تاریخ، زمان، مناطق زمانی و دورههای زمانی در اختیار ما قرار داده است.
۱. کلاسهای اصلی تاریخ
- LocalDate: فقط تاریخ (سال، ماه، روز).
- LocalTime: فقط زمان (ساعت، دقیقه، ثانیه، نانوثانیه).
- LocalDateTime: هر دو (تاریخ و زمان).
- ZonedDateTime: تاریخ و زمان به همراه منطقه زمانی (Time Zone).
۲. نمایش زمان فعلی 🚀
برای دریافت زمانِ همین لحظه، از متد استاتیک now() استفاده میکنیم:
۳. فرمتبندی تاریخ (DateTimeFormatter)
خروجی پیشفرض جاوا (ISO_DATE) همیشه برای کاربر پسند نیست. با DateTimeFormatter میتوانید ظاهر تاریخ را تغییر دهید:
yyyy-MM-dd (2024-12-25)
- dd/MM/yyyy (25/12/2024)
- E, MMM dd yyyy (Wed, Dec 25 2024)
چرا java.time؟
کلاسهای قدیمی (مثل java.util.Date) دارای مشکلات طراحیِ زیادی بودند و Mutable (تغییرپذیر) بودند که باعث باگهای احمقانه میشد. کلاسهای جدید در جاوا 8 به بعد Immutable (تغییرناپذیر) هستند؛ یعنی هر تغییر، یک شیء جدید میسازد که بسیار ایمنتر است.
بخش تخصصی: مهندسی داده و بازدهی در جاوا ⚙️💎
در این بخش، به مفاهیمی میپردازیم که برای نوشتن برنامههای مقیاسپذیر و با کارایی بالا (High Performance) ضروری هستند.
۱. تحلیل پیچیدگی زمانی (Big O Notation)
انتخاب کالکشنِ اشتباه میتواند سرعت برنامه شما را از میلیثانیه به دقیقه کاهش دهد. مثلاً پر کردن یک ArrayList با ۱ میلیون داده در صورتی که مدام از ابتدای آن حذف کنید، فاجعهبار است (O(n)). در حالی که LinkedList این کار را در زمان ثابت (O(1)) انجام میدهد. همیشه قبل از انتخاب ابزار، به نحوه دسترسی و تغییر دادهها فکر کنید.
۲. مدیریت حافظه (Memory Overhead)
اشیاءِ کالکشن در جاوا "ارزان" نیستند. یک HashMap یا LinkedList به ازای هر گره (Node) مقدار زیادی حافظه اضافی (Overhead) برای نگهداری ریفرنسهای داخلی مصرف میکند. در سیستمهایی با رم محدود، گاهی اوقات استفاده از یک آرایه ساده یا کالکشنهای تخصصیِ Primitive (مثل آنچه در کتابخانههای Trove یا FastUtil یافت میشود) گزینهی بهتری است.
۳. امنیت نخ (Thread Safety) و کالکشنها
اکثر کالکشنهای پایه در جاوا (مثل ArrayList و HashMap) Thread-Safe نیستند. یعنی اگر دو نخ (Thread) همزمان سعی کنند در آنها بنویسند، برنامه کراش میکند یا دادهها خراب میشوند. برای محیطهای چندنخی، باید از ConcurrentHashMap یا کلاسهای کمکی در Collections.synchronizedList استفاده کرد.
List<String> list = new ArrayList<>();. این کار تعویضِ پیادهسازی را در آینده بسیار راحت میکند.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
با استفاده از کلاس LocalDate، تاریخ فعلی سیستم را در متغیری به نام today ذخیره و چاپ کنید. نام پکیج لازم را هم import کنید.
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println(today);
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.