জাভা তারিখ বনাম ক্যালেন্ডার


364

কেউ দয়া করে বর্তমান Dateএবং সর্বোত্তম Calendarপ্রকারের "সেরা অনুশীলন" সম্পর্কে পরামর্শ দিতে পারেন ।

নতুন কোড লেখার Calendarসময় Date, সর্বদা পক্ষপাত করা ভাল , বা এমন পরিস্থিতি রয়েছে যেখানে Dateআরও উপযুক্ত ডেটাটাইপ?



2
অবগতির জন্য, যেমন বিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর java.util.Date, java.util.Calendarএবং java.text.SimpleDateFormatএখন উত্তরাধিকার দ্বারা supplanted java.time ক্লাস। জাভা.টাইম কার্যকারিতার বেশিরভাগটি থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং জাভা 7 -এ ব্যাকপোর্ট করা হয়েছে। থ্রিটেনএবিপি প্রকল্পে পূর্ববর্তী অ্যান্ড্রয়েডের জন্য আরও অভিযোজিত । দেখুন ThreeTenABP কীভাবে ব্যবহার করতে হয় ...
বাসিল বাউরক

2
এফওয়াইআই, জোডা-টাইম প্রকল্প (অন্য মন্তব্যে উল্লিখিত) এখন রক্ষণাবেক্ষণের মোডে রয়েছে , দলটি জাভা.টাইম ক্লাসগুলিতে মাইগ্রেশনের পরামর্শ দিচ্ছেওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
বাসিল বাউরক

উত্তর:


377

তারিখটি একটি সহজ শ্রেণি এবং এটি পিছনে সামঞ্জস্যতার কারণে মূলত রয়েছে। আপনার যদি নির্দিষ্ট তারিখগুলি সেট করতে বা তারিখ গণিতের প্রয়োজন হয় তবে একটি ক্যালেন্ডার ব্যবহার করুন। ক্যালেন্ডারগুলি স্থানীয়করণও পরিচালনা করে। তারিখের পূর্ববর্তী তারিখের ম্যানিপুলেশন ফাংশনগুলি হ্রাস করা হয়েছে been

ব্যক্তিগতভাবে আমি দীর্ঘ সময় (অথবা লং, যথাযথ হিসাবে) বা ক্যালেন্ডার হিসাবে কোনও পছন্দ থাকাকালীন সময়টি মিলিসেকেন্ডে ব্যবহার করতে পারি।

তারিখ এবং ক্যালেন্ডার উভয়ই পরিবর্তনযোগ্য, যা কোনও এপিআই-তে ব্যবহার করার সময় বিষয়গুলি উপস্থাপন করে।


5
অবগতির জন্য, যেমন ভয়ঙ্কর বিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর java.util.Date, java.util.Calendarএবং java.text.SimpleDateFormatএখন উত্তরাধিকার দ্বারা supplanted java.time জাভা 8 এবং পরে পাতাটা ক্লাস। ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
তুলসী বাউরক

67

নতুন কোডের জন্য সেরা উপায় (যদি আপনার নীতি তৃতীয় পক্ষের কোডকে মঞ্জুরি দেয়) হ'ল জোদা টাইম লাইব্রেরিটি ব্যবহার করা ।

তারিখ এবং ক্যালেন্ডার উভয়েই অনেকগুলি ডিজাইনের সমস্যা রয়েছে যা উভয়ই নতুন কোডের জন্য ভাল সমাধান নয়।


7
আমি জোদা সময় ব্যবহার করার পরামর্শ দ্বিতীয়। এটি ব্যবহার করা এবং বোঝা সহজ এবং আপনি ব্যবহার করতে পারেন আরও কার্যকারিতা সরবরাহ করে।
জেরোইন ভ্যান বার্গেন

30
কিনা Joda সময় বা মানক JDK শ্রেণীর দিয়ে বিদ্ধ ব্যবহার করার জন্য আলোচনার জন্য দেখুন stackoverflow.com/questions/589870/...
Jonik

3
আমি জানি না এটি ডাউনভোটদের প্রাপ্য কিনা, তবে এটি প্রশ্নের উত্তর দেয় না। একটি মন্তব্য হিসাবে ভাল হতে পারে।
আইসডড্যান্ট

7
প্রশ্নটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করার জন্য তারিখ এবং ক্যালেন্ডার ব্যবহারের বিষয়ে ছিল যা কোনও প্রকল্পে একক বিক্রেতা নির্ভরতা ঝুঁকি যুক্ত করে।
আর্কিমিডিস ট্রাজানো

3
জাভা.টাইম প্যাকেজটি জাভা ৮ দিয়ে উপলব্ধ করা অবধি এই "সেরা উপায়" ছিল
ডাব্লিক

58
  • Date এবং Calendar সত্যই একই মৌলিক ধারণা (উভয়ই সময়ের সাথে সাথে তাত্ক্ষণিক প্রতিনিধিত্ব করে এবং অন্তর্নিহিত longমানটির চারপাশে মোড়ক হয়)।

  • কেউ যুক্তি দিতে পারে যে Calendarএটি আসলে তুলনায় আরও বেশি ভেঙে গেছেDate , যেমন মনে হয় সপ্তাহের দিন এবং দিনের সময়ের মতো বিষয়গুলি সম্পর্কে দৃ concrete় তথ্য সরবরাহ করা হয়, আপনি যদি এটি পরিবর্তন করেন তবেtimeZone দৃ concrete় তথ্য সরবরাহ করা সম্পত্তি তবে কংক্রিটটি ব্লাঙ্কম্যানজে পরিণত হয়! কোনও কারণেই এই বছরের জন্য বছরের-মাস-দিনের বা দিনের -সময় সঞ্চয় হিসাবে সত্যই কার্যকর নয় ।

  • Calendarকেবলমাত্র একটি ক্যালকুলেটর হিসাবে ব্যবহার করুন যা যখন দেওয়া হয় Dateএবং TimeZoneঅবজেক্টগুলি আপনার জন্য গণনা করে do কোনও অ্যাপ্লিকেশনটিতে সম্পত্তি টাইপ করার জন্য এর ব্যবহার এড়িয়ে চলুন।

  • প্রদর্শন স্ট্রিংগুলির SimpleDateFormatসাথে TimeZoneএবং Dateউত্পন্ন করতে একসাথে ব্যবহার করুন ।

  • আপনি যদি জোডা-টাইম অ্যাডভেঞ্চারস ব্যবহার অনুভব করছেন তবে এটি অহেতুক জটিল আইএমএইচও এবং শীঘ্রই কোনও ইভেন্টে জেএসআর -310 তারিখের এপিআই দ্বারা উত্তোলন করা হবে।

  • আমি এর আগে উত্তর দিয়েছি যে আপনার নিজের YearMonthDayক্লাসটি রোল করা কঠিন নয় , যা Calendarতারিখ গণনার জন্য ফণার নীচে ব্যবহার করে। আমি এই পরামর্শের জন্য অবহেলিত ছিলাম তবে আমি এখনও বিশ্বাস করি যে এটি একটি বৈধ একটি কারণ বেশিরভাগ ব্যবহারের ক্ষেত্রে জোদা-সময় (এবং জেএসআর -310 ) সত্যই এতটা জটিল।


1
জেএসআর 310 এর জন্য কি কোনও সময়সীমা আছে? এটি জাভা 7 এ হতে চলেছিল, তবে আমি বিশ্বাস করি এটি এখনকার ঘটনা নয়।
ব্রায়ান অগ্নিউ

@ ব্রায়ান - এটি অবশ্যই মেলিং তালিকায় খুব শান্ত হয়ে গেছে!
অক্সবো_লাক্স

শুধু পরীক্ষা করে দেখুন, এটি নিষ্ক্রিয় হয়ে গেছে, যার অর্থ তারা 18 মাসে কোনও মাইলফলক খসড়া প্রকাশ করেন নি :-(
ব্রায়ান অগ্নিউ

মেলিং তালিকার সর্বাধিক সাম্প্রতিক মন্তব্য জুলাই থেকে এবং স্টিফেনের, সুতরাং সম্ভবত প্রকল্পটি এখনও
টিকছে

একমত। যদি আপনি জানেন যে কীভাবে তারিখগুলি পরিচালনা করার জন্য তারিখটি নিরাপদে এবং অপরিবর্তনীয় বস্তু হিসাবে নিরাপদে ব্যবহার করতে হয়, তবে বেশিরভাগ লোকের নিরাপদ থাকা উচিত। মাল্টিথ্রেড কোডে সিম্পলডিটফর্ম্যাট ব্যবহার করার সময় সাবধানতা অবলম্বন করুন।
cwash

25

তারিখ অবজেক্ট সংরক্ষণের জন্য তারিখ সেরা। এটি অবিচলিত একটি, সিরিয়ালাইজড ...

তারিখগুলি পরিচালনা করার জন্য ক্যালেন্ডার সেরা।

দ্রষ্টব্য: আমরা কখনও কখনও java.lang. তারিখেরও বেশি সময় ধরে রাখি, কারণ তারিখটি পরিবর্তনযোগ্য এবং তাই থ্রেড-নিরাপদ নয়। একটি তারিখ অবজেক্টে, উভয়ের মধ্যে স্যুইচ করতে সেটটাইম () এবং গেটটাইম () ব্যবহার করুন। উদাহরণস্বরূপ, অ্যাপ্লিকেশনটির একটি স্থির তারিখ (উদাহরণস্বরূপ: শূন্য 1970/01/01, বা একটি আবেদনকারী END_OF_TIME যা আপনি 2099/12/31 এ সেট করেছেন; বিশেষত শুরুর সময় এবং শেষ সময় হিসাবে নাল মানগুলি প্রতিস্থাপন করতে খুব কার্যকর useful যখন আপনি এটি ডাটাবেসে অবিরাম থাকেন, এসকিউএল যেমন নালাগুলির সাথে এত অদ্ভুত) is


আপনি এটি অপরিবর্তনীয় সম্পর্কে গ্রহণ করছেন তা আমি গ্রহণ করিjava.lang.Long
pjp

17

আমি সাধারণত সম্ভব হলে তারিখটি ব্যবহার করি। যদিও এটি পরিবর্তনীয়, তবুও মিউটররা প্রকৃতপক্ষে হ্রাস পেয়েছে। শেষ পর্যন্ত এটি মূলত একটি দীর্ঘকে আবৃত করে যা তারিখ / সময়কে উপস্থাপন করে। বিপরীতে, আমি ক্যালেন্ডারগুলি ব্যবহার করব যদি আমার মানগুলি চালিত করতে হয়।

আপনি এটি এইভাবে ভাবতে পারেন: আপনি কেবল তখন স্ট্রিংবফার ব্যবহার করেন যখন আপনার স্ট্রিংগুলি থাকা দরকার যা আপনি সহজেই পরিচালনা করতে পারেন এবং তারপরে টস্ট্রিং () পদ্ধতিটি ব্যবহার করে স্ট্রিংগুলিতে রূপান্তর করতে পারেন rings একইভাবে, আমি কেবলমাত্র টেম্পোরাল ডেটা ব্যবহার করতে চাইলে ক্যালেন্ডার ব্যবহার করি।

সেরা অনুশীলনের জন্য, আমি ডোমেন মডেলের বাইরে যতটা সম্ভব অপরিবর্তনীয় জিনিসগুলি ব্যবহার করার প্রবণতা রাখি । এটি কোনও পার্শ্ব প্রতিক্রিয়া হওয়ার সম্ভাবনা উল্লেখযোগ্যভাবে হ্রাস করে এবং এটি JUnit পরীক্ষার পরিবর্তে সংকলক দ্বারা আপনার জন্য করা হয়। আপনি আপনার ক্লাসে ব্যক্তিগত চূড়ান্ত ক্ষেত্র তৈরি করে এই কৌশলটি ব্যবহার করেন ।

এবং স্ট্রিংবফার উপমাতে ফিরে আসছি। এখানে কিছু কোড যা আপনাকে দেখায় যে কীভাবে ক্যালেন্ডার এবং তারিখের মধ্যে রূপান্তর করতে হয়

String s = "someString"; // immutable string
StringBuffer buf = new StringBuffer(s); // mutable "string" via StringBuffer
buf.append("x");
assertEquals("someStringx", buf.toString()); // convert to immutable String

// immutable date with hard coded format.  If you are hard
// coding the format, best practice is to hard code the locale
// of the format string, otherwise people in some parts of Europe
// are going to be mad at you.
Date date =     new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).parse("2001-01-02");

// Convert Date to a Calendar
Calendar cal = Calendar.getInstance();
cal.setTime(date);

// mutate the value
cal.add(Calendar.YEAR, 1);

// convert back to Date
Date newDate = cal.getTime();

// 
assertEquals(new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).parse("2002-01-02"), newDate);

হ্যাঁ, অপরিবর্তনীয় বস্তুগুলি তারিখ-সময়ের কাজের জন্য অর্থবোধ করেJava.time ক্লাস supplanted Date/ Calendarঅপরিবর্তনীয় বস্তু প্যাটার্ন ব্যবহার করুন।
তুলসী বাউরক

এটি সত্য হতে পারে তবে ২০১০ সালে নয়
আর্কিমিডস ট্রাজানো

হ্যাঁ. এখন পর্যন্ত এই পৃষ্ঠাটি হাজার হাজার লোক পড়ছেন , এখন পর্যন্ত দেড় লক্ষেরও বেশি। আমার মন্তব্য তাদের কাছে একটি নোট, আপনার সমালোচনা নয়।
তুলিল বাউরক

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

1
প্রকৃতপক্ষে, জাভা 6 এবং 7 এর জন্য আমাদের থ্রিটেন-ব্যাকপোর্ট প্রকল্প রয়েছে। এটি কার্যত একই এপিআই সহ বেশিরভাগ জাভা.টাইম কার্যকারিতা নিয়ে আসে । সুতরাং সেই ভয়ঙ্কর উত্তরাধিকারের তারিখ-সময় ক্লাসগুলি ব্যবহার করার দরকার নেই।
তুলসী বাউরক

15

Dateগুলি সময়মতো অপরিবর্তনীয় পয়েন্ট হিসাবে ব্যবহার করা উচিত; Calendarগুলি পরিবর্তনীয়, এবং চূড়ান্ত তারিখটি নিয়ে আসতে যদি আপনার অন্যান্য ক্লাসের সাথে সহযোগিতা করতে হয় তবে আপনার চারপাশে পাস এবং সংশোধন করা যেতে পারে। তাদের অনুরূপ বিবেচনা করুন StringএবংStringBuilder এবং আপনি বুঝতে পারবেন আমি কেমন বিবেচনা তারা ব্যবহার করা উচিত।

(এবং হ্যাঁ, আমি জানি তারিখটি আসলে প্রযুক্তিগতভাবে অপরিবর্তনীয় নয়, তবে উদ্দেশ্যটি হ'ল এটি পরিবর্তনযোগ্য হওয়া উচিত নয় এবং যদি কিছু অবহেলিত পদ্ধতিগুলি না বলে তবে তা তাই))


হ্যাঁ, অপরিবর্তনীয় বস্তুগুলি তারিখ-সময়ের কাজের জন্য অর্থবোধ করেJava.time ক্লাস supplanted Date/ Calendarঅপরিবর্তনীয় বস্তু প্যাটার্ন ব্যবহার করুন। বিশেষত, Instantপ্রতিস্থাপন করে java.util.Dateএবং ZonedDateTimeপ্রতিস্থাপন করে Calendar/ GregorianCalendar
তুলসী বাউরক

15

TL; ড

আশেপাশে Dateএবং "বর্তমানের সেরা অনুশীলন" সম্পর্কে পরামর্শ দিনCalendar

সর্বদা উপকার Calendarকরা ভাল?Date

পুরোপুরি এই উত্তরাধিকারের ক্লাসগুলি এড়িয়ে চলুন । ব্যবহার করুন java.time পরিবর্তে ক্লাস।

  • ইউটিসিতে এক মুহুর্তের জন্য , ব্যবহার করুন (এর আধুনিক সমতুল্য)Instant
    Date ) ব্যবহার করুন
  • নির্দিষ্ট সময় অঞ্চলে এক মুহুর্তের জন্য (আধুনিক সমতুল্য ) ব্যবহার করুনZonedDateTime
    GregorianCalendar
  • কোনও নির্দিষ্ট অফসেট-ইউটিসি-তে এক মুহুর্তের জন্য , ব্যবহার করুনOffsetDateTime
    (উত্তরাধিকার শ্রেণিতে সমতুল্য নয়)
  • অজানা সময় অঞ্চল বা অফসেট সহ একটি তারিখ-সময়ের জন্য (এক মুহূর্ত নয়) ব্যবহার করুন (উত্তরাধিকার শ্রেণিতে সমতুল্য নয়)LocalDateTime

আধুনিক ও উত্তরাধিকার উভয় ক্ষেত্রে জাভাতে সমস্ত তারিখ-সময়ের ধরণের সারণী

বিস্তারিত

Ortomala দ্বারা উত্তর Lokni সঠিক আধুনিক ব্যবহার সুপারিশ java.time (বরং বিরক্তিজনক পুরাতন উত্তরাধিকার তারিখ-সময় শ্রেণীর চেয়ে শ্রেণীর Date,Calendar , ইত্যাদি)। তবে সেই উত্তরটি ভুল শ্রেণিকে সমতুল্য হিসাবে প্রস্তাব করে (সেই উত্তর সম্পর্কে আমার মন্তব্য দেখুন)।

জাভা.টাইম ব্যবহার

জাভা.টাইম ক্লাসগুলি উত্তরাধিকারের তারিখ-সময় ক্লাস, রাত্রি এবং দিনের পার্থক্যের তুলনায় বিশাল উন্নতি। পুরানো ক্লাসগুলি খারাপভাবে ডিজাইন করা, বিভ্রান্তিকর এবং ঝামেলাযুক্ত। আপনার যখনই সম্ভব পুরানো ক্লাসগুলি এড়ানো উচিত। কিন্তু যখন আপনাকে পুরানো / নতুন থেকে রূপান্তর করতে হবে, আপনি পুরানো ক্লাসগুলিতে নতুন পদ্ধতি যুক্ত করে কল করতে পারেন ।

রূপান্তর সম্পর্কিত আরও তথ্যের জন্য, আমার উত্তর এবং নিফটি চিত্রটি অন্য প্রশ্নের কাছে দেখুন, java.util রূপান্তর করুন ate "জাভা.টাইম" টাইপের তারিখটি কী?

স্ট্যাক ওভারফ্লো অনুসন্ধান জাভা.টাইম ব্যবহারের ক্ষেত্রে শত শত উদাহরণ এবং বিভিন্ন উত্তর দেয়। তবে এখানে একটি দ্রুত সংক্ষিপ্তসার রয়েছে।

Instant

একটি সঙ্গে বর্তমান মুহুর্ত পান InstantInstantক্লাসে টাইমলাইনে একটি মুহূর্ত প্রতিনিধিত্ব করে ইউটিসি একটি রেজোলিউশনে ন্যানোসেকেন্ড (একসঙ্গে নয় জন (9) একটি দশমিক ভগ্নাংশের সংখ্যায় পর্যবসিত)।

Instant instant = Instant.now();

ZonedDateTime

কিছু নির্দিষ্ট অঞ্চলের প্রাচীর-ঘড়ির সময় লেন্সের মাধ্যমে একই একই মুহূর্তটি দেখতে একটি সময় অঞ্চল প্রয়োগ করুন ( )ZoneIdZonedDateTime

সময় অঞ্চল

একটি নির্দিষ্ট করুন সঠিক সময় অঞ্চল নাম এর বিন্যাসে continent/regionযেমন America/Montreal, Africa/Casablancaঅথবা Pacific/Auckland। কখনও যেমন 3-4 চিঠি সংক্ষেপ ব্যবহার ESTবা ISTহিসাবে তারা না সত্য সময় অঞ্চল, না মান, এবং এমনকি অনন্য নয় (!)।

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone();

অফসেট

একটি সময় অঞ্চল হ'ল একটি অঞ্চলের এর অফসেট-থেকে-ইউটিসি-র পরিবর্তনের ইতিহাস । তবে কখনও কখনও সম্পূর্ণ জোন ব্যতীত আপনাকে কেবল অফসেট দেওয়া হয়। সেক্ষেত্রে OffsetDateTimeক্লাসটি ব্যবহার করুন ।

ZoneOffset offset = ZoneOffset.parse( "+05:30" );
OffsetDateTime odt = instant.atOffset( offset );

একমাত্র অফসেট ব্যবহারের চেয়ে টাইম জোন ব্যবহার করা ভাল।

LocalDateTime

Local…ক্লাসগুলিতে "স্থানীয়" অর্থ কোনও লোকাল , কোনও নির্দিষ্ট লোকেশন নয়। নামটি স্ব-স্বজ্ঞাত হতে পারে।

LocalDateTime, LocalDateএবং LocalTimeউদ্দেশ্যমূলকভাবে অফসেট বা সময় অঞ্চল সম্পর্কে কোনও তথ্যের অভাব রয়েছে। সুতরাং তারা কি না প্রকৃত মুহূর্ত প্রতিনিধিত্ব, তারা না টাইমলাইনে পয়েন্ট। সন্দেহ বা বিভ্রান্তিতে থাকলে ZonedDateTimeবরং ব্যবহার করুনLocalDateTime । আরও অনেক আলোচনার জন্য অনুসন্ধান স্ট্যাক ওভারফ্লো।

স্ট্রিংস

তারিখ-সময় অবজেক্টগুলিকে স্ট্রিংগুলির সাথে সংযুক্ত করবেন না যা তাদের মান উপস্থাপন করে। আপনি একটি তারিখ-সময় অবজেক্ট পেতে একটি স্ট্রিং পার্স করতে পারেন, এবং আপনি একটি তারিখ-সময় অবজেক্ট থেকে একটি স্ট্রিং তৈরি করতে পারেন। তবে স্ট্রিংটি কখনই তারিখ-সময় নয়।

জাভা.টাইম ক্লাসে ডিফল্টরূপে ব্যবহৃত স্ট্যান্ডার্ড আইএসও 8601 ফর্ম্যাটগুলি সম্পর্কে জানুন ।


জাভা.টাইম সম্পর্কে

Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.DateCalendarSimpleDateFormat

Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।

আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310

জেডিবিসি ড্রাইভারের সাথে জেডিবিসি ৪.২ বা তার পরে উপযুক্ত ব্যবহার করে আপনি জাভা.টাইম বিনিময় করতে পারেন সরাসরি আপনার ডাটাবেসের সাথে অবজেক্টগুলি । স্ট্রিং বা জাভা.এসকিউএল। * ক্লাসের প্রয়োজন নেই।

জাভা.টাইম ক্লাস কোথায় পাবেন?

জাভা বা অ্যান্ড্রয়েডের কোন সংস্করণটি ব্যবহার করবে তা জাভা.টাইম লাইব্রেরির সারণী

ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval, YearWeek, YearQuarter, এবং আরো


10

জাভা 8 এর সাথে নতুন জাভা.টাইম প্যাকেজটি ব্যবহার করা উচিত।

অবজেক্টগুলি অপরিবর্তনীয়, সময় অঞ্চল এবং দিনের আলো সংরক্ষণ আমলে নেওয়া হয়।

আপনি ZonedDateTimeকোনও পুরাতন java.util.Dateঅবজেক্ট থেকে এটির মতো একটি বিষয় তৈরি করতে পারেন :

    Date date = new Date();
    ZonedDateTime zonedDateTime = date.toInstant().atZone(ZoneId.systemDefault());

জাভা.টাইম ক্লাসগুলির পরামর্শ দেওয়া ভাল। তবে পরামর্শ দেওয়া খারাপ LocalDateTime। এই শ্রেণিটি ইউটিসি এবং সময় অঞ্চল থেকে অফসেট-সম্পর্কিত কোনও তথ্য উদ্দেশ্যমূলকভাবে হারিয়ে ফেলে। সুতরাং শ্রেণিটি ইউটিসি-তে সমতুল্য নয়Date এবং Calendarএকটি নির্ধারিত সময় অঞ্চল রয়েছে। দেখুন আমার উত্তর এবং ছিমছাম ডায়াগ্রাম অপর এক প্রশ্নের, কি হবে "java.time" টাইপ করতে java.util.Date রূপান্তর?
বাসিল বাউরক

9

আমি সর্বদা জোদা-সময়কে সমর্থন করি । কারণটা এখানে.

  1. এপিআই সামঞ্জস্যপূর্ণ এবং স্বজ্ঞাত। Java.util. তারিখ / ক্যালেন্ডার API গুলি থেকে আলাদা
  2. এটি জাভা.টেক্সট.সিম্পলডেট ফরমেটের বিপরীতে থ্রেডিংয়ের সমস্যায় ভুগছে না ইত্যাদি (মানক তারিখ / সময় বিন্যাস থ্রেড-নিরাপদ নয় তা বুঝতে না পেরে আমি বহু ক্লায়েন্টের সমস্যা দেখেছি)
  3. এটি জাভা ৮ এর জন্য নির্ধারিত নতুন জাভা তারিখ / সময় APIs ( JSR310 ) এর ভিত্তি So সুতরাং আপনি এমন APIs ব্যবহার করবেন যা মূল জাভা APIs হয়ে উঠবে।

সম্পাদনা: জাভা 8-এর সাথে প্রবর্তিত জাভা তারিখ / সময়ের ক্লাসগুলি এখন পছন্দসই সমাধান, যদি আপনি জাভা 8 এ স্থানান্তর করতে পারেন


3
শেষবার আমি যখন দেখেছি, জেডিএ এবং জেএসআর -310 খুব আলাদা দেখাচ্ছে, এমনকি যদি সেগুলি উভয়ই স্টিফেন কুলবার্নের লেখা by এতে বলা হয়েছে, জেডিএ আপনাকে জেটআর -310-এর সমাধানের তারিখ-সময় সমস্যার জটিলতার সাথে পরিচয় করিয়ে দেবে
অক্সবো_লাকস

2
প্রশ্নটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করার জন্য তারিখ এবং ক্যালেন্ডার ব্যবহারের বিষয়ে ছিল যা কোনও প্রকল্পে একক বিক্রেতা নির্ভরতা ঝুঁকি যুক্ত করে।
আর্কিমিডিস ট্রাজানো

2
আমি বজায় রেখেছি সেরা অনুশীলনটি কেবল সেই ক্লাসগুলি ব্যবহার না করা
ব্রায়ান অগ্নিউ

3
Java.util. তারিখ এবং ক্যালেন্ডার ক্লাসগুলির সাথে জ্ঞাত সমস্যাগুলি দেওয়া, জোদা-সময় (বা জেএসআর 310) পরামর্শ দেওয়া আমার কাছে উপযুক্ত এবং দায়বদ্ধ বলে মনে হচ্ছে। আমরা স্বাদ বা নান্দনিক শৈলীর বিষয় নিয়ে কথা বলছি না। যদি কেউ জিজ্ঞাসা করেন যে তাদের লাল গাড়ি বা রূপা গাড়ি নেওয়া উচিত, এবং আমি জানতাম যে লাল গাড়িটির একটি ফ্ল্যাট টায়ার ছিল এবং সিলভারের গাড়িতে একটি রেডিয়েটর রয়েছে, আমি কি গাড়িটি বেছে নেব বা আমি ট্যাক্সি ডাকার পরামর্শ দেব? এই প্রশ্নের উত্তর আজকাল সুস্পষ্ট বলে মনে করা উচিত যেমন সান / ওরাকলও সেই জঙ্কারদের পিছনে ফেলে একটি নতুন গাড়ি কেনার সিদ্ধান্ত নিয়েছে: জেএসআর 310: তারিখ এবং সময় এপিআই।
বাসিল বাউরক

1
এফওয়াইআই, জোদা-টাইম প্রকল্পটি এখন রক্ষণাবেক্ষণের মোডে রয়েছে , জাভা.টাইম ক্লাসগুলিতে মাইগ্রেশনের পরামর্শ দেয় । ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
তুলসী বাউরক

8

পার্টিতে কিছুটা দেরি হলেও জাভাতে জেডিকে ৮ তে একটি নতুন ডেট টাইম এপিআই রয়েছে You আপনি আপনার জেডিকে সংস্করণটি আপগ্রেড করতে পারেন এবং মানটিকে আলিঙ্গন করতে পারেন। আর অগোছালো তারিখ / ক্যালেন্ডার নেই, তৃতীয় পক্ষের জার নেই।


1

তারিখটি আবার বিকাশ করা উচিত। দীর্ঘ ইন্টিজার হওয়ার পরিবর্তে, এটি পৃথক ক্ষেত্র হিসাবে বছর, মাস, তারিখ, ঘন্টা, মিনিট, দ্বিতীয় হওয়া উচিত। এই তারিখটির সাথে সম্পর্কিত ক্যালেন্ডার এবং সময় অঞ্চলটি সংরক্ষণ করা এমনকি ভাল good

আমাদের প্রাকৃতিক কথোপকথনে, নভেম্বরের 1, 2013 নিউ ওয়াই টাইমের সময় যদি একটি অ্যাপয়েন্টমেন্ট সেটআপ হয় তবে এটি একটি ডেটটাইম। এটি কোনও ক্যালেন্ডার নয়। সুতরাং আমাদের জাভাতেও এর মতো কথোপকথন করতে সক্ষম হওয়া উচিত।

যখন তারিখটি একটি দীর্ঘ পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হয় (জানুয়ারী 1 1970 বা মিলি সেকেন্ডের 1) এর বর্তমান তারিখ গণনা ক্যালেন্ডারের উপর নির্ভর করে। বিভিন্ন ক্যালেন্ডার বিভিন্ন তারিখ দেবে। এটি একটি নিখুঁত সময় দেওয়ার সম্ভাবনা থেকে এসেছে (যেমন বিগ ব্যাংয়ের পরে 1 ট্রিলিয়ন সেকেন্ড)। তবে প্রায়শই আমাদের কথোপকথনের একটি সুবিধাজনক উপায় যেমন একটি বস্তু encapsulating বছর, মাস ইত্যাদি প্রয়োজন হয় need

আমি ভাবছি যে এই 2 টি উদ্দেশ্যকে পুনর্নির্মাণের জন্য জাভাতে নতুন অগ্রগতি আছে কিনা। হয়তো আমার জাভা জ্ঞানটি অনেক পুরানো।


আপনি একই সময়ে তাত্ক্ষণিকভাবে সঞ্চয় করতে পারেন তবে বিভিন্ন ক্যালেন্ডার সিস্টেমের ভিত্তিতে বিভিন্ন ঘন্টা / মিনিট / দিন / সপ্তাহ / বছর / ফু / কে প্রতিবেদন করা একটি শক্তি, কোনও দুর্বলতা নয়। এটি (জটিল) বাস্তবতা প্রতিফলিত করে।
ThrwnCA

প্রকৃতপক্ষে, Dateনতুনভাবে বিকশিত হয়েছে; java.time.Instantক্লাস দ্বারা প্রতিস্থাপিত । এবং Calendar/ ক্লাস GregorianCalendarদ্বারা প্রতিস্থাপিত হয়েছিল java.time.ZonedDateTime
তুলসী বাউরক

0

বিটিডব্লিউ "তারিখ" সাধারণত "অপ্রচলিত / অবহেলিত" হিসাবে ট্যাগ হয় (আমি ঠিক জানি না কেন) - সে সম্পর্কে কিছু লেখা আছে এখানে জাভা: তারিখ নির্মাতা কেন অবচিত হ'ল, এবং এর পরিবর্তে আমি কী ব্যবহার করব?

দেখে মনে হচ্ছে এটি কেবল নতুন তারিখের মাধ্যমে ( নির্ধারিত বছর, পূর্ব মাস, পূর্ব দিন) , প্রস্তাবিত উপায়টি ক্যালেন্ডারের মাধ্যমে এবং পৃথকভাবে প্যারামগুলি সেট করা আছে .. ( ক্যালেন্ডার Cal = Calendar.getInstance (); )


0

আমি সময় পরিবর্তন করতে যেমন তারিখগুলি সম্পর্কে কিছু নির্দিষ্ট ক্রিয়াকলাপ প্রয়োজন যখন আমি ক্যালেন্ডারটি ব্যবহার করি তবে আপনার প্রয়োজনীয়তা খাপ খাইয়ে নেওয়ার জন্য আপনাকে যখন তারিখটি ফর্ম্যাট করতে হবে তখন তারিখটি আমি সহায়ক বলে মনে করি, সম্প্রতি আমি আবিষ্কার করেছি যে লোকেলে প্রচুর কার্যকর অপারেশন এবং পদ্ধতি রয়েছে o সুতরাং আমি এখনই লোকাল ব্যবহার করছি!


অবগতির জন্য, বিরক্তিজনক Calendar& Dateশ্রেণীর দ্বারা বছর পূর্বে supplanted হয়েছে java.time ক্লাস। কখনও ব্যবহার করার প্রয়োজন নেই Dateবা Calendar। আর Localeতারিখ-সময় বস্তুর অর্থ সঙ্গে কিছুই করার আছে। একটি Localeকেবলমাত্র তারিখের সময় অবজেক্টের মান উপস্থাপনের জন্য পাঠ্য উত্পন্ন করার সময় স্থানীয়করণে ব্যবহৃত মানব ভাষা এবং সাংস্কৃতিক নিয়ম নির্দিষ্ট করতে ব্যবহৃত হয়।
তুলিল বাউরক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.