tl; ডা
java.util.Date.from(
Instant.now() ;
)
যদিও উপরের কোডটিতে কোনও বক্তব্য ছিল না। উভয়ই java.util.Date
এবং Instant
সর্বদা ইউটিসিতে ইউটিসিতে একটি মুহুর্ত উপস্থাপন করে। উপরের কোডটির একই প্রভাব রয়েছে:
new java.util.Date()
এখানে ব্যবহারের কোনও সুবিধা নেই ZonedDateTime
। আপনার যদি ইতিমধ্যে একটি থাকে তবে ZonedDateTime
একটিটি বের করে UTC এ সামঞ্জস্য করুন Instant
।
java.util.Date.from(
myZonedDateTime.toInstant()
)
অন্যান্য উত্তর সঠিক
উত্তর দ্বারা ssoltanid সঠিকভাবে আপনার নির্দিষ্ট প্রশ্ন ঠিকানাগুলি, কিভাবে একটি নতুন স্কুল java.time বস্তু (রূপান্তর করতে ZonedDateTime
একটি পুরানো স্কুল পর্যন্ত) java.util.Date
অবজেক্ট। Instant
জোনেডেটটাইম থেকে এটিকে বের করুন এবং এতে পাস করুন java.util.Date.from()
।
ডেটা ক্ষতি
মনে রাখবেন আপনি হবে ডেটা হারিয়ে ভোগে হিসাবে, Instant
গানগুলি ন্যানোসেকেন্ড যেহেতু কাল যখন java.util.Date
ট্র্যাক মিলিসেকেন্ড যুগান্তকারী গেছে।
আপনার প্রশ্ন এবং মন্তব্য অন্যান্য সমস্যা উত্থাপন।
সার্ভারগুলিকে ইউটিসিতে রাখুন
আপনার সার্ভারগুলির সাধারণত তাদের সর্বোত্তম অনুশীলন হিসাবে ইউটিসিতে তাদের হোস্ট ওএস সেট করা উচিত। জাভা বাস্তবায়নের বিষয়ে আমি অবগত যা জেভিএম এই হোস্ট ওএস সেটিংটিকে তার ডিফল্ট সময় অঞ্চল হিসাবে তুলে ধরে।
সময় অঞ্চল নির্দিষ্ট করুন
তবে আপনার কখনই জেভিএমের বর্তমান ডিফল্ট টাইম জোনের উপর নির্ভর করা উচিত নয়। হোস্ট সেটিংটি বাছাইয়ের পরিবর্তে, একটি জেভিএম চালু করার সময় একটি পতাকা উত্তীর্ণ হয়ে অন্য একটি সময় অঞ্চল নির্ধারণ করতে পারে। আরও খারাপ: কোনও অ্যাপের যে কোনও থ্রেডের যে কোনও কোড যে কোনও মুহুর্তে java.util.TimeZone::setDefault
রানটাইমের সময় সেই ডিফল্টটি পরিবর্তন করার জন্য কল করতে পারে!
ক্যাসান্দ্রার Timestamp
প্রকার
যে কোনও শালীন ডাটাবেস এবং ড্রাইভারের স্টোরের জন্য ইউটিসিতে একটি পাস করা তারিখ-সময়কে স্বয়ংক্রিয়ভাবে পরিচালনা করতে হবে। আমি ক্যাসান্দ্রা ব্যবহার করি না, তবে মনে হয় এটি তারিখের জন্য কিছু প্রাথমিক সহায়তা পেয়েছে। ডকুমেন্টেশন বলছে যে এর Timestamp
প্রকারটি একই যুগ থেকে মিলিসেকেন্ডের একটি গণনা (ইউটিসিতে 1970 এর প্রথম মুহূর্ত)।
আইএসও 8601
তদতিরিক্ত, ক্যাসান্দ্রা আইএসও 8601 স্ট্যান্ডার্ড ফর্ম্যাটে স্ট্রিং ইনপুট গ্রহণ করে। ভাগ্যক্রমে, জাভা.টাইম স্ট্রিং পার্সিং / উত্পন্ন করার জন্য এটির ডিফল্ট হিসাবে আইএসও 8601 ফর্ম্যাটগুলি ব্যবহার করে। Instant
শ্রেণী ' toString
বাস্তবায়ন চমত্কারভাবে চেষ্টা করতে হবে।
যথার্থতা: মিলিসেকেন্ড বনাম ন্যানোসেকর্ড
তবে প্রথমে আমাদের জোনডেটটাইম টাইমের ন্যানোসেকেন্ড যথার্থতাটিকে মিনিসেকেন্ডে হ্রাস করতে হবে। একটি উপায় হ'ল মিলিসেকেন্ড ব্যবহার করে একটি তাজা তাত্ক্ষণিক তৈরি করা। ভাগ্যক্রমে, জাভা.টাইমের কাছে মিলিসেকেন্ডে এবং থেকে রূপান্তর করার জন্য কয়েকটি কার্যকর পদ্ধতি রয়েছে।
উদাহরণ কোড
এখানে জাভা 8 আপডেট 60-তে কিছু উদাহরণ কোড রয়েছে।
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );
…
Instant instant = zdt.toInstant();
Instant instantTruncatedToMilliseconds = Instant.ofEpochMilli( instant.toEpochMilli() );
String fodderForCassandra = instantTruncatedToMilliseconds.toString();
অথবা এই ক্যাসান্দ্রা জাভা ড্রাইভার ডক অনুসারে আপনি একটি java.util.Date
উদাহরণ পাস করতে পারেন (এতে বিভ্রান্ত হবেন না java.sqlDate
)। সুতরাং আপনি instantTruncatedToMilliseconds
উপরের কোড থেকে একটি জুডেট করতে পারেন ।
java.util.Date dateForCassandra = java.util.Date.from( instantTruncatedToMilliseconds );
যদি এটি প্রায়শই করা হয় তবে আপনি ওয়ান লাইনার তৈরি করতে পারেন।
java.util.Date dateForCassandra = java.util.Date.from( zdt.toInstant() );
তবে সামান্য ইউটিলিটি পদ্ধতি তৈরি করা আরও নিকটতর হবে।
static public java.util.Date toJavaUtilDateFromZonedDateTime ( ZonedDateTime zdt ) {
Instant instant = zdt.toInstant();
java.util.Date utilDate = java.util.Date.from( instant ) ;
return utilDate;
}
প্রশ্নের তুলনায় এই সমস্ত কোডের মধ্যে পার্থক্যটি লক্ষ্য করুন। প্রশ্নের কোডটি জোনেডেটটাইম টাইম অঞ্চলটি ইউটিসির সাথে সামঞ্জস্য করার চেষ্টা করছিল। তবে এটি প্রয়োজনীয় নয়। ধারণা:
জোনেডেটটাইম = তাত্ক্ষণিক + জোনআইড
আমরা কেবল ইনস্ট্যান্ট অংশটি বের করেছি, যা ইতিমধ্যে ইউটিসি-তে রয়েছে (মূলত ইউটিসিতে, সুনির্দিষ্ট বিশদের জন্য ক্লাস ডকটি পড়ুন)।
জাভা.টাইম সম্পর্কে
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.Date
Calendar
SimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়াল দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যাগুলির জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।
java.util.Date
এবংjava.sql.Date
।