আমি জাতির ইউটিসি বা জিএমটিতে বর্তমান তারিখ এবং সময়টি কীভাবে পেতে পারি?


479

যখন আমি একটি নতুন Dateঅবজেক্ট তৈরি করি , এটি বর্তমান সময়ের সাথে তবে স্থানীয় সময় অঞ্চলে শুরু হয়। GMT- এ আমি কীভাবে বর্তমান তারিখ এবং সময় পেতে পারি?


আমি জানি যে এই ধরণের বিষয়গুলি সম্পূর্ণরূপে আলোচিত হয়েছে, তবে আমি দেখতে পেয়েছি যে কমন্স-ল্যাং প্যাকেজটি সত্যিই এই সাধারণ জাভা ইস্যুগুলি ভালভাবে পরিচালনা করে। commons.apache.org/lang/api-2.5/org/apache/commons/lang/time তাদের কাছে থাকা বিভিন্ন প্যাকেজ পরীক্ষা করে দেখুন।

আপনি কোন স্থানীয় সময় চান এবং কোন নির্ভুলতার জন্য। বেশিরভাগ টাইমজোনগুলি এসআই সেকেন্ডে পরিমাপ করা একটি নির্দিষ্ট অফসেটের সাথে ইউটিসির তুলনায় সংজ্ঞায়িত করা হয় , তবে জিএমটি-র সম্পর্ক যা সৌর পর্যবেক্ষণের ভিত্তিতে এবং একটি (সামান্য) পরিবর্তনশীল দৈর্ঘ্যের দ্বিতীয়টি আরও জটিল। দুটির মধ্যে 0.9 সেকেন্ড পর্যন্ত পার্থক্য রয়েছে।
mc0e

1
একজন Dateকোন সময় জোন রাখা না, তাই "কিন্তু স্থানীয় টাইমজোনের মধ্যে" (শ্রেষ্ঠ সময়ে বা বেঠিক) সঠিক নয় তা দেখুন। Java.util.Date সম্পর্কে সবকিছু
ওলে ভি ভি

উত্তর:


409

java.util.Dateকোনও নির্দিষ্ট সময় অঞ্চল নেই যদিও এর মানটি ইউটিসির সাথে সর্বাধিক বিবেচিত। স্থানীয় সময় এটি আপনাকে কী মনে করে?

সুনির্দিষ্টভাবে বলতে গেলে: java.util.Dateইউনিক্সের প্রথম যুগের ইউটিসির মধ্যরাতে ইউনিক্সের যুগের পরে মিলের সেকেন্ডগুলির মধ্যে একটির মধ্যে মান । একই সময়টি অন্যান্য সময় অঞ্চলেও বর্ণিত হতে পারে তবে traditionalতিহ্যবাহী বর্ণনাটি ইউটিসির শর্তে। একটি নির্দিষ্ট যুগের পরে এটি বেশ কয়েকটি মিলিসেকেন্ড হিসাবে java.util.Date, স্থানীয় সময় অঞ্চল নির্বিশেষে কোনও নির্দিষ্ট তাত্ক্ষণিকের মধ্যে এর মান বিশ্বব্যাপী সমান।

আমি সন্দেহ করি যে সমস্যাটি হ'ল আপনি এটি ক্যালেন্ডারের একটি উদাহরণের মাধ্যমে প্রদর্শন করছেন যা স্থানীয় সময় অঞ্চল ব্যবহার করে বা সম্ভবত Date.toString()স্থানীয় সময় অঞ্চল ব্যবহার করে বা একটি SimpleDateFormatউদাহরণ, যা ডিফল্টরূপে স্থানীয় সময় অঞ্চলও ব্যবহার করে।

যদি এটি সমস্যা না হয় তবে দয়া করে কিছু নমুনা কোড পোস্ট করুন।

তবে আমি আপনাকে সুপারিশ করব যে আপনি যে কোনও উপায়ে জোদা-সময় ব্যবহার করুন , যা অনেক ক্লিয়ারার এপিআই দেয়।


5
তাহলে সম্ভবত এটি চালকের সমস্যা। আপনাকে আপনার সংযোগটি ইউটিসির সাথে সেট করতে হবে বা এটির মতো কিছু হতে পারে। আমি এর আগে সমস্যাগুলি দেখেছি, তবে সমস্যাটি java.util.Date তে নেই।
জন স্কিটি

13
Behrang অনুযায়ী stackoverflow.com/questions/4123534/... , মাইএসকিউএল JDBC ড্রাইভার একটি প্রদত্ত পরিবর্তন করে java.util.Timestamp(অথবা java.util.Date) সার্ভারে সময় অঞ্চল রয়েছে।
ডেরেক মাহর

5
@জনাব. বিড়াল: আপনি কীভাবে এটি নির্ধারণ করছেন? এটা কি লিখে System.out.println(new Date())? যদি তা হয় তবে আপনার সচেতন হওয়া উচিত যে এটি সেই toString()পদ্ধতিটি যা সেখানে সময় অঞ্চল প্রয়োগ করছে ... যদি এটি না হয় তবে দয়া করে আরও বিশদ দিন।
জন স্কিটি

8
@ কানাগাভেলু সুগুমার: toString()সর্বদা ডিফল্ট সময় অঞ্চল ব্যবহার করে। date.getTime()ইউটিসিতে ইউনিক্সের সূচনাকাল থেকেই অবশ্যই মিলিসেকেন্ডগুলি ফেরত দেয়। এটি বলা সবচেয়ে নির্ভুলভাবে বলা যায় যে Dateনিজের কাছে কোনও সময় অঞ্চল নেই - এটি সময় মাত্র একটি তাত্ক্ষণিক, যা একাধিক টাইম জোনে বিবেচিত হতে পারে। তবে আপনি যখন কোনও উদাহরণ তৈরি করেন এটি আপনার সময় অঞ্চলের উপর নির্ভর করে না
জন স্কিটি

6
@ জেমেনাকে: আসলে গ্রিনউইচের মধ্যরাত্রি হওয়ার সময় এটি ঘটেনি, কারণ সেই সময় ইউটিসি ইউটিসি +১ তে ছিল। ইতিহাসের বিজোড় বিটগুলির মধ্যে একটি মাত্র। তবে আমি আপনার বক্তব্যটি বিবেচনা করি - "নতুন তারিখ () get ইউটিসি-এর প্রথম জানুয়ারীর মধ্যরাতের সময় ইউনিক্সের পর্বের পর থেকে" গেটটাইম () মিলিসেকেন্ডগুলি ফেরত পাঠিয়েছিল বলে ভাল। " সুতরাং ইউটিসি সময়কে নির্দিষ্ট সময়ে তাত্ক্ষণিকভাবে পর্বটি পিন করার অংশ, ফলাফলের অংশ নয়।
জন স্কিটি

323

TL; ড

Instant.now()   // Capture the current moment in UTC. 

সেই মানটি উপস্থাপন করতে একটি স্ট্রিং উত্পন্ন করুন:

Instant.now().toString()  

2016-09-13T23: 30: 52.123Z

বিস্তারিত

হিসাবে জন স্কিট দ্বারা সঠিক উত্তর বিবৃত, একটি java.util.Date বস্তুর হয়েছে কোন সময় অঞ্চল । কিন্তু তার toStringবাস্তবায়ন জেভিএম ডিফল্ট সময় জোন প্রযোজ্য যখন যে তারিখ-সময় মান স্ট্রিং উপস্থাপনা উৎপাদিত। বিভ্রান্তিমূলকভাবে উদ্ভট প্রোগ্রামারকে, একটি তারিখের একটি সময় অঞ্চল মনে হয় তবে তা হয় না।

java.util.Date, j.u.Calendar, এবং java.text.SimpleDateFormatজাভা সাথে বান্ডেল শ্রেণীর কুখ্যাতিপূর্ণভাবে বিরক্তিজনক হয়। এগুলি এড়িয়ে চলুন। পরিবর্তে, এই উপযুক্ত তারিখ-কালীন গ্রন্থাগারগুলির মধ্যে দুটি ব্যবহার করুন:

জাভা.টাইম (জাভা 8)

জাভা 8 একটি নতুন নতুন জাভা.টাইম * প্যাকেজ এনেছে পুরানো java.util . তারিখ / ক্যালেন্ডার ক্লাসগুলিকে সরবরাহ করার জন্য package

ইউটিসি / জিএমটিতে বর্তমান সময় পাওয়া একটি সহজ ওয়ান-লাইনার ...

Instant instant = Instant.now();

সেই Instantশ্রেণিটি জাভা.টাইমের বেসিক বিল্ডিং ব্লক, ইউটিসিতে ন্যানোসেকেন্ডগুলির রেজোলিউশন সহ টাইমলাইনে একটি মুহুর্তের প্রতিনিধিত্ব করে ।

জাভা 8-এ, বর্তমান মুহূর্তটি কেবলমাত্র মিলি সেকেন্ডের রেজোলিউশনের সাহায্যে ধরা পড়ে। জাভা 9 তাজা বাস্তবায়ন এনেছে এর Clockএই শ্রেণীর পূর্ণ ন্যানোসেকেন্ড সামর্থ্য পর্যন্ত এ যেমনটি বর্তমান মুহূর্ত, আপনার হোস্ট কম্পিউটারের ঘড়ি হার্ডওয়্যার ক্ষমতা উপর নির্ভর করে।

এটি toStringপদ্ধতিতে একটি নির্দিষ্ট আইএসও 8601 ফর্ম্যাট ব্যবহার করে এর মানটির একটি স্ট্রিং প্রতিনিধিত্ব উত্পন্ন করে । এই ফর্ম্যাটটি শূন্য, তিন, ছয় বা নয়টি অঙ্কের অঙ্ক ( মিলিসেকেন্ড , মাইক্রোসেকেন্ডস , বা ন্যানোসেকেন্ড ) আউটপুট -এর-সেকেন্ডের প্রতিনিধিত্ব করতে প্রয়োজনীয় হিসাবে আউটপুট দেয় ।

আপনি আরো নমনীয় বিন্যাস, বা অন্যান্য অতিরিক্ত বৈশিষ্ট্য চান, তাহলে শূন্য একজন অফসেট-থেকে-ইউটিসি প্রযোজ্য ইউটিসি নিজেই (জন্য ZoneOffset.UTCধ্রুবক ) একটি পেতে OffsetDateTime

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC );

কনসোল করতে ডাম্প ...

System.out.println( "now.toString(): " + now );

যখন চালানো…

now.toString(): 2014-01-21T23:42:03.522Z

জাভাতে আধুনিক এবং উত্তরাধিকার উভয়ই তারিখের সময়ের ধরণের সারণী।


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

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

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

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

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

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

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

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


Joda-টাইম

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

ব্যবহার Joda-টাইম ফ্রি-এর খরচের 3 য় পক্ষের ওপেন সোর্স গ্রন্থাগার, আপনি কোড শুধু এক লাইনে বর্তমান তারিখ-সময় পেতে পারেন।

জোদা-টাইম জাভা ৮-এ নতুন জাভা.টাইম * * ক্লাসগুলি অনুপ্রাণিত করেছে, তবে তার আলাদা স্থাপত্য রয়েছে। আপনি জাবার পুরানো সংস্করণগুলিতে জোদা-সময় ব্যবহার করতে পারেন। জোদা-টাইম জাভা 8 এ কাজ চালিয়ে যাচ্ছে এবং সক্রিয়ভাবে রক্ষণাবেক্ষণ করা অব্যাহত রেখেছে (2014 হিসাবে)। তবে জোদা-টাইম দলটি জাভা.টাইমে মাইগ্রেশন সম্পর্কিত পরামর্শ দেয়।

System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );

আরও বিশদ উদাহরণ কোড (জোদা-সময় 2.3)…

org.joda.time.DateTime now = new org.joda.time.DateTime(); // Default time zone.
org.joda.time.DateTime zulu = now.toDateTime( org.joda.time.DateTimeZone.UTC );

কনসোল করতে ডাম্প ...

System.out.println( "Local time in ISO 8601 format: " + now );
System.out.println( "Same moment in UTC (Zulu): " + zulu );

যখন চালানো…

Local time in ISO 8601 format: 2014-01-21T15:34:29.933-08:00
Same moment in UTC (Zulu): 2014-01-21T23:34:29.933Z

টাইম জোনের কাজ করার কোডের আরও উদাহরণের জন্য দেখুন আমার অনুরূপ প্রশ্নের উত্তর

সময় অঞ্চল

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

now()পাস করার সময় কল করা কাঙ্ক্ষিত / প্রত্যাশিত সময় অঞ্চল নির্ধারিত হবে। DateTimeZoneক্লাস ব্যবহার করুন ।

DateTimeZone zoneMontréal = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zoneMontréal );

এই শ্রেণিটি ইউটিসি সময় অঞ্চলের জন্য একটি ধ্রুবক ধারণ করে ।

DateTime now = DateTime.now( DateTimeZone.UTC );

আপনি যদি সত্যিই JVM- র বর্তমান ডিফল্ট সময় অঞ্চলটি ব্যবহার করতে চান তবে একটি স্পষ্ট কল করুন যাতে আপনার কোডটি স্ব-ডকুমেন্টিং হয়।

DateTimeZone zoneDefault = DateTimeZone.getDefault();

আইএসও 8601

আইএসও 8601 ফর্ম্যাটগুলি সম্পর্কে পড়ুন । জাভা.টাইম এবং জোদা-টাইম উভয়ই স্ট্রিংকে পার্সিং এবং উত্পন্ন করার জন্য তাদের ডিফল্ট হিসাবে স্ট্যান্ডার্ডের বোধগম্য বিন্যাসগুলি ব্যবহার করে।


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


2
DateTime.now().toDateTime(DateTimeZone.UTC)আমি কি খুঁজছিলাম ছিল! ধন্যবাদ!
মানাগরম

1
@Managarm আপনি কমান করতে পারে না: DateTime nowUtc = DateTime.now ( DateTimeZone.UTC ) ;
বেসিল Bourque

আপনি 2014-01-21T15:34:29.933-08:00যে উদাহরণটি ব্যবহার করেছেন খাঁটি জাভা 8 এর মাধ্যমে এটি কীভাবে পাবেনnew org.joda.time.DateTime()
GOXR3PLUS

1
@ GOXR3PLUS ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) ).truncatedTo( ChronoUnit.MILLIS ).toOffsetDateTime().toString() আমরা একটি নির্দিষ্ট সময় অঞ্চলের জন্য বর্তমান মুহূর্তটি পাই। এরপরে, কোনও মাইক্রো / ন্যানো বন্ধ করে দিন। তারপরে আমরা পূর্ণ-বিকাশমান সময় অঞ্চলটির পরিবর্তে কেবলমাত্র অফসেট-থেকে-ইউটিসি (ঘন্টা-মিনিট-সেকেন্ডের সংখ্যা) এ রূপান্তর করি (কোনও লোকের দ্বারা ব্যবহৃত অফসেটের অতীত, বর্তমান এবং ভবিষ্যতের পরিবর্তনের ইতিহাস) নির্দিষ্ট অঞ্চল)। শেষ পর্যন্ত, আমরা OffsetDateTimeএর toStringপদ্ধতিতে ডিফল্টরূপে ব্যবহৃত স্ট্যান্ডার্ড আইএসও 8601 ফর্ম্যাট অনুসারে মানটির প্রতিনিধিত্ব করে পাঠ্য উত্পন্ন করি ।
বেসিল বাউরক

এই বিস্তৃত ব্যাখ্যা দেওয়ার জন্য ধন্যবাদ, অ্যান্ড্রয়েড সমর্থনগুলির জন্যও +1 :) @ বাসিলবার্ক
মোচাদবী

271
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));

//Local time zone   
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );

11
ডেটফরম্যাটজম্যাট ফর্ম্যাটটি ব্যবহার করার পরে আপনি কেন ডেটফর্ম্যাটলোকলের সাথে বিশ্লেষণ করেন ... তা পড়ে তা বোঝা যায় না। আমি নিশ্চিত যে এটি কাজ করে, তবে কি অবাক হচ্ছেন?
মাইন্ডওয়ায়ার

2
সেটটাইমজোন এটি করেছে (আমি অনুমান করি আপনি জিএমটি হিসাবে গেটটাইমজোন ("ইউটিসি") একই জিনিস ব্যবহার করতে পারেন?)
রজারডপ্যাক

6
তবে সময়টি ডিভাইসের সেট সময়ের উপর নির্ভর করে। যদি ব্যবহারকারী তার ডিভাইসে ভুল সময় নির্ধারণ করে থাকেন তবে আপনি ভুল ইউটিসি পেতে পারেন wrong ভুল হলে আমাকে
সংশোধন করুন

@ বাসভরাজহাম্পালি কিন্তু আজকের বিশ্বে বেশিরভাগ ডিভাইসই ইন্টারনেটে সংযুক্ত রয়েছে যা ভুল সময়কে সংশোধন করে
অক্ষত আগরওয়াল

3
সমন্বিত ইউনিভার্সাল সময় (ইউটিসি) এবং গ্রিনিচ গড় সময় (GMT) এর মধ্যে কোনও সময়ের পার্থক্য নেই
স্লট

86

এটি অবশ্যই ইউটিসি সময় দেয়: স্ট্রিং এবং তারিখের অবজেক্ট হিসাবে!

static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

public static Date getUTCdatetimeAsDate() {
    // note: doesn't check for null
    return stringDateToDate(getUTCdatetimeAsString());
}

public static String getUTCdatetimeAsString() {
    final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    final String utcTime = sdf.format(new Date());

    return utcTime;
}

public static Date stringDateToDate(String StrDate) {
    Date dateToReturn = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);

    try {
        dateToReturn = (Date)dateFormat.parse(StrDate);
    }
    catch (ParseException e) {
        e.printStackTrace();
    }

    return dateToReturn;
}

আমার উত্তরে আমি তারিখের সংজ্ঞাটি কীভাবে সংজ্ঞায়িত করাতে তা ভুলে গিয়েছিলাম: static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
কেউ কোথাও

21
দয়া করে জাভাতে বড় হাতের সাথে পদ্ধতির নামগুলি শুরু করা এড়ান। পদ্ধতির নামের জন্য জাভা কোডিং কনভেনশন দেখুন ।
ফ্লোরিয়ান শ্রফনার

2
এই উত্তরে যেমন পুনঃনির্দেশিত হয়েছে ততক্ষণ, new Date()ডিভাইসের সময়টি ভুল হলে কল করা কখনই সঠিক ইউটিসি সময় ফিরিয়ে দেয় না।
সানুপ

এই পদ্ধতিটি কি ডিভাইস ক্যালেন্ডারের উপর নির্ভর করে সময় পাবে?
আর্নল্ড ব্রাউন

একটি বিষয় লক্ষণীয়। ইউটিসিতে একটি তারিখ বা টাইমস্ট্যাম্প পেতে যে কোনও সমাধান প্রয়োজন হয়, এটি দেখতে মনে হয় কীটি হ'ল সিম্পলডেটফর্ম্যাটটি পুনরায় ব্যবহার না করে বরং ইউটিসিটিকে একটি স্ট্রিংয়ের জন্য ব্যবহার করতে হবে, তারপরে স্ট্রিংটিকে কোনও তারিখে রূপান্তর করার সময় অন্য ইউটিসি তৈরি করুন create বা টাইমস্ট্যাম্প অবজেক্ট। আমি লক্ষ্য করেছি যে আপনি যদি একই সিম্পলডেটফর্ম্যাটটি পুনরায় ব্যবহার করার চেষ্টা করেন তবে ফলাফলের তারিখ / টাইমস্ট্যাম্প অবজেক্টটি ইউটিসির পরিবর্তে স্থানীয় সময় অঞ্চলটিতে ফিরে আসবে।
ব্রায়ান বেগুন

65
    Calendar c = Calendar.getInstance();
    System.out.println("current: "+c.getTime());

    TimeZone z = c.getTimeZone();
    int offset = z.getRawOffset();
    if(z.inDaylightTime(new Date())){
        offset = offset + z.getDSTSavings();
    }
    int offsetHrs = offset / 1000 / 60 / 60;
    int offsetMins = offset / 1000 / 60 % 60;

    System.out.println("offset: " + offsetHrs);
    System.out.println("offset: " + offsetMins);

    c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
    c.add(Calendar.MINUTE, (-offsetMins));

    System.out.println("GMT Time: "+c.getTime());

52

আসলে সময় নয়, তবে এর প্রতিনিধিত্ব পরিবর্তন করা যেতে পারে।

SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));

পৃথিবীর যে কোনও পয়েন্টে সময় একরকম, তবে আমাদের সময় সম্পর্কে উপলব্ধি অবস্থানের উপর নির্ভর করে আলাদা হতে পারে।


হ্যাঁ, সুন্দর এবং পরিষ্কার সমাধান। এটি কেবল আমাকে চিন্তিত করে, যদি এটি ক্যালেন্ডার উদাহরণ না পেয়ে নতুন ডেট অবজেক্ট তৈরি করা অকার্যকর হয়?
বেমো

এটি জেভিএম দ্বারা অনুকূলিত হবে এবং হটস্পট সম্ভাব্য কার্যকর x86 কোড কার্যকর করবে
আন্তোনিও

17

ক্যালেন্ডার এজিএমটিসিএলডার = ক্যালেন্ডার.সেট ইনস্ট্যান্স (টাইমজোন.সেটটাইমজোন ("জিএমটি")); তারপরে এজিএমটিসিএলেন্ডার অবজেক্টটি ব্যবহার করে সমস্ত ক্রিয়াকলাপ জিএমটি টাইম জোনের সাথে সম্পন্ন হবে এবং দিবালোকের সঞ্চয় সময় বা স্থির অফসেটগুলি প্রয়োগ করা হবে না

ভুল!

Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
aGMTCalendar.getTime(); //or getTimeInMillis()

এবং

Calendar aNotGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));aNotGMTCalendar.getTime();

একই সময় ফিরে আসবে। আইডেমের জন্য

new Date(); //it's not GMT.

17

এই কোডটি বর্তমান সময়ের ইউটিসি প্রিন্ট করে।

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;


public class Test
{
    public static void main(final String[] args) throws ParseException
    {
        final SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        f.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println(f.format(new Date()));
    }
}

ফলাফল

2013-10-26 14:37:48 UTC

14

এটি অ্যান্ড্রয়েডে ইউটিসি মিলিসেকেন্ড পাওয়ার জন্য কাজ করে।

Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);  
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;

7
কেবল আপনাকেই অফসেট বিয়োগ করতে হবে?
tevch

c.add(Calendar.MILLISECOND, (-utcOffset))utc টাইমজোন সহ ক্যালেন্ডার পেতে
এম

10

জন স্কিটির উত্তরে যা ভুল বলে মনে হচ্ছে তা এখানে । সে বলেছিল:

java.util.Dateসর্বদা ইউটিসিতে থাকে। স্থানীয় সময় এটি আপনাকে কী মনে করে? আমার সন্দেহ হয় যে সমস্যাটি হ'ল আপনি এটি ক্যালেন্ডারের একটি উদাহরণের মাধ্যমে প্রদর্শন করছেন যা স্থানীয় সময় অঞ্চল ব্যবহার করে বা সম্ভবত Date.toString()স্থানীয় সময় অঞ্চল ব্যবহার করে।

তবে কোড:

System.out.println(new java.util.Date().getHours() + " hours");

না Calendarএবং না ব্যবহার করে জিএমটি (ইউটিসি ঘন্টা) নয় স্থানীয় সময় দেয় SimpleDateFormat

যে কারণে মনে হয় কিছু ভুল আছে।

প্রতিক্রিয়াগুলি, কোডটি একত্রিত করা:

System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
                           .get(Calendar.HOUR_OF_DAY) + " Hours");

স্থানীয় সময়গুলির পরিবর্তে জিএমটি ঘন্টা দেখায় - নোটটি getTime.getHours()অনুপস্থিত কারণ এটি একটি Date()বস্তু তৈরি করবে , যা তাত্ত্বিকভাবে জিএমটিতে তারিখটি সংরক্ষণ করে, তবে স্থানীয় সময় অঞ্চলে ঘন্টাগুলি ফিরিয়ে দেয়।


6
আমি এই উত্তরটি আগে দেখিনি, তবে আপনি অবহ্রাসিত Date.getHours()পদ্ধতির জন্য ডকুমেন্টেশনটি পড়লে এটি এটি খুব স্পষ্ট করে তোলে: "প্রত্যাবর্তিত মানটি এমন একটি সংখ্যা যা (0 থেকে 23 অবধি) যে দিনের মধ্যে থাকে বা তার সাথে শুরু হয় তার ঘন্টাটিকে উপস্থাপন করে তাত্ক্ষণিকভাবে এই তারিখ অবজেক্ট দ্বারা উপস্থাপিত, যেমন স্থানীয় সময় অঞ্চলে ব্যাখ্যা করা হয় । " (। জোর খনি) এটা getHours()পদ্ধতি যা স্থানীয় সময় জোন মান ব্যাখ্যা করে - এটা রাজ্যের অংশ নয় Dateবস্তুর নিজেই।
জন স্কিটি

2
জন স্কিটি সঠিকভাবে বলেছে যে, java.util.Date অবজেক্টটির কোনও সময় অঞ্চল নেই । তবে বিভ্রান্তিকরভাবে, পদ্ধতিগুলি toStringএবং getHoursতাদের আউটপুটে ডিফল্ট সময় অঞ্চল প্রয়োগ করে। সুতরাং, নিষ্পাপ প্রোগ্রামাররা সহজেই বোকা হয়ে যায় কারণ মনে হয় যে একটি তারিখের একটি সময় অঞ্চল রয়েছে তবে বাস্তবে তা নেই।
বেসিল বাউরক

7

আপনি যদি ইউটিসির জন্য অ্যাডজাস্ট করা ক্ষেত্রগুলি সহ একটি তারিখ অবজেক্ট চান তবে আপনি জোদা সময়ের সাথে এটি করতে পারেন :

import org.joda.time.DateTimeZone;
import java.util.Date;

...

Date local = new Date();
System.out.println("Local: " + local);
DateTimeZone zone = DateTimeZone.getDefault();
long utc = zone.convertLocalToUTC(local.getTime(), false);
System.out.println("UTC: " + new Date(utc));

1
আপনি খুব পরিশ্রম করছেন। জোডা-টাইম কোডের একক লাইনে এটি করতে পারে। এই প্রশ্নের আমার নিজের উত্তর দেখুন । .toDateTimeপদ্ধতিটি কল করুন এবং ইউটিসি সময় অঞ্চলের জন্য ধ্রুবকটি পাস করুন।
তুলসী বাউরক

1
তারিখসময় utcDate = নতুন তারিখসময় () toDateTime (DateTimeZone.UTC)।
Maciej Miklas

6

তুমি ব্যবহার করতে পার:

Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

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


6
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(date));

দয়া করে আপনার উত্তরে কিছু ব্যাখ্যা যুক্ত করুন, এটি অন্য অনেক উত্তর থেকে কীভাবে আলাদা?
akjoshi

এই পদ্ধতিটি কি ডিভাইস ক্যালেন্ডারের উপর নির্ভর করে সময় পাবে?
আর্নল্ড ব্রাউন

6

আপনি সরাসরি এটি ব্যবহার করতে পারেন

SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");

5

সঙ্গে:

Calendar cal = Calendar.getInstance();

তারপরে calবর্তমান তারিখ এবং সময় রয়েছে।
আপনি এর সাথে টাইমজোনটির বর্তমান তারিখ এবং সময়ও পেতে পারেন:

Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));

আপনি জিজ্ঞাসা করতে পারে cal.get(Calendar.DATE); অন্যদের বিশদ সম্পর্কে বা অন্যান্য ক্যালেন্ডার ধ্রুবক।
তারিখ এবং টাইমস্ট্যাম্প জাভাতে অবচয় করা হয়েছে। ক্যালেন্ডার ক্লাস এটা না।


6
তারিখ এবং টাইমস্ট্যাম্পের নির্দিষ্ট কিছু পদ্ধতি এবং নির্মাতাকে অবচয় করা হয়েছে, তবে ক্লাসগুলি সেগুলি নয়।
পাওয়ারলর্ড

5

জিএমটি টাইমস্ট্যাম্প অবজেক্টটি পেতে এখানে অন্য একটি পরামর্শ:

import java.sql.Timestamp;
import java.util.Calendar;

...

private static Timestamp getGMT() {
   Calendar cal = Calendar.getInstance();
   return new Timestamp(cal.getTimeInMillis()
                       -cal.get(Calendar.ZONE_OFFSET)
                       -cal.get(Calendar.DST_OFFSET));
}

5

স্ট্রিং ফর্ম্যাটে GMT সময় পাওয়ার আরও একটি উপায় এখানে

String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss z" ;
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String dateTimeString =  sdf.format(new Date());

5

এখানে আমার টুটসি বাস্তবায়ন:

    public static Date toUTC(Date date){
    long datems = date.getTime();
    long timezoneoffset = TimeZone.getDefault().getOffset(datems);
    datems -= timezoneoffset;
    return new Date(datems);
}

এটির উন্নতি করার বেশ কয়েকটি উপায় সম্ভবত রয়েছে তবে এটি আমার পক্ষে কার্যকর।


3

একটি নির্দিষ্ট সময় অঞ্চল এবং একটি নির্দিষ্ট ফর্ম্যাটে সিস্টেমের সময় রেন্ডার করতে নমুনা কোড।

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class TimZoneTest {
    public static void main (String[] args){
        //<GMT><+/-><hour>:<minutes>
        // Any screw up in this format, timezone defaults to GMT QUIETLY. So test your format a few times.

        System.out.println(my_time_in("GMT-5:00", "MM/dd/yyyy HH:mm:ss") );
        System.out.println(my_time_in("GMT+5:30", "'at' HH:mm a z 'on' MM/dd/yyyy"));

        System.out.println("---------------------------------------------");
        // Alternate format 
        System.out.println(my_time_in("America/Los_Angeles", "'at' HH:mm a z 'on' MM/dd/yyyy") );
        System.out.println(my_time_in("America/Buenos_Aires", "'at' HH:mm a z 'on' MM/dd/yyyy") );


    }

    public static String my_time_in(String target_time_zone, String format){
        TimeZone tz = TimeZone.getTimeZone(target_time_zone);
        Date date = Calendar.getInstance().getTime();
        SimpleDateFormat date_format_gmt = new SimpleDateFormat(format);
        date_format_gmt.setTimeZone(tz);
        return date_format_gmt.format(date);
    }

}

আউটপুট

10/08/2011 21:07:21
at 07:37 AM GMT+05:30 on 10/09/2011
at 19:07 PM PDT on 10/08/2011
at 23:07 PM ART on 10/08/2011

3

শুধু একটি তৈরি করতে এই সহজ করতে, Dateমধ্যে UTCআপনি ব্যবহার করতে পারেন Calendar:

Calendar.getInstance(TimeZone.getTimeZone("UTC"));

যা Calendar"ইউটিসি" ব্যবহারের জন্য একটি নতুন উদাহরণ তৈরি করবেTimeZone

আপনার যদি Dateসেই ক্যালেন্ডার থেকে কোনও জিনিস প্রয়োজন হয় তবে আপনি কেবল ব্যবহার করতে পারেন getTime()


5
এ সম্পর্কে গেটটাইম () কল করার কারণে এটি সময় অঞ্চল তথ্য হারাতে এবং স্থানীয় সময় ফিরে আসে।
RealCasally

3

ইউটিসিতে বর্তমান তারিখের সময় রূপান্তর করা:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

DateTimeZone dateTimeZone = DateTimeZone.getDefault(); //Default Time Zone

DateTime currDateTime = new DateTime(); //Current DateTime

long utcTime = dateTimeZone.convertLocalToUTC(currDateTime .getMillis(), false);

String currTime = formatter.print(utcTime); //UTC time converted to string from long in format of formatter

currDateTime = formatter.parseDateTime(currTime); //Converted to DateTime in UTC

1
আপনি এখানে খুব বেশি কাজ করছেন। (ক) আপনি যে ফর্ম্যাটর প্যাটারটিকে সংজ্ঞায়িত করেছেন সেটি ডিফল্টরূপে একটি ডেটটাইমে অন্তর্নির্মিত; toStringসেই আইএসও 8601 স্ট্রিং প্যাটার্নটি পেতে কেবল একটি ডেটটাইমে কল করুন । (খ) সময় অঞ্চলগুলির মধ্যে রূপান্তর করার জন্য অনেক বেশি কোড। কেবল "টু ডেটটাইম" কল করুন এবং একটি সময় অঞ্চল অবজেক্টটি পাস করুন। ভালো: myDateTime.toDateTime( DateTimeZone.UTC )। একটি নির্দিষ্ট টাইম জোনের জন্য, উপযুক্ত নাম , কলের ভিত্তিতে একটি টাইম জোন অবজেক্ট ইনস্ট্যান্ট করুন এবং পাস করুন myDateTime.toDateTime( DateTimeZone.forID( "Asia/Tehran" ) )
বাসিল বাউরক

2

এটি আমার পক্ষে কাজ করেছে, জিএমটিতে টাইমস্ট্যাম্প ফিরিয়ে দেয়!

    Date currDate;
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
    SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

    long currTime = 0;
    try {

        currDate = dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
        currTime = currDate.getTime();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

2

কোনও অনলাইন এনটিপি সার্ভার থেকে সঠিক ইউটিসি সময় পেতে এই ক্লাসটি ব্যবহার করুন:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


class NTP_UTC_Time
{
private static final String TAG = "SntpClient";

private static final int RECEIVE_TIME_OFFSET = 32;
private static final int TRANSMIT_TIME_OFFSET = 40;
private static final int NTP_PACKET_SIZE = 48;

private static final int NTP_PORT = 123;
private static final int NTP_MODE_CLIENT = 3;
private static final int NTP_VERSION = 3;

// Number of seconds between Jan 1, 1900 and Jan 1, 1970
// 70 years plus 17 leap days
private static final long OFFSET_1900_TO_1970 = ((365L * 70L) + 17L) * 24L * 60L * 60L;

private long mNtpTime;

public boolean requestTime(String host, int timeout) {
    try {
        DatagramSocket socket = new DatagramSocket();
        socket.setSoTimeout(timeout);
        InetAddress address = InetAddress.getByName(host);
        byte[] buffer = new byte[NTP_PACKET_SIZE];
        DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);

        buffer[0] = NTP_MODE_CLIENT | (NTP_VERSION << 3);

        writeTimeStamp(buffer, TRANSMIT_TIME_OFFSET);

        socket.send(request);

        // read the response
        DatagramPacket response = new DatagramPacket(buffer, buffer.length);
        socket.receive(response);          
        socket.close();

        mNtpTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);            
    } catch (Exception e) {
      //  if (Config.LOGD) Log.d(TAG, "request time failed: " + e);
        return false;
    }

    return true;
}


public long getNtpTime() {
    return mNtpTime;
}


/**
 * Reads an unsigned 32 bit big endian number from the given offset in the buffer.
 */
private long read32(byte[] buffer, int offset) {
    byte b0 = buffer[offset];
    byte b1 = buffer[offset+1];
    byte b2 = buffer[offset+2];
    byte b3 = buffer[offset+3];

    // convert signed bytes to unsigned values
    int i0 = ((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);
    int i1 = ((b1 & 0x80) == 0x80 ? (b1 & 0x7F) + 0x80 : b1);
    int i2 = ((b2 & 0x80) == 0x80 ? (b2 & 0x7F) + 0x80 : b2);
    int i3 = ((b3 & 0x80) == 0x80 ? (b3 & 0x7F) + 0x80 : b3);

    return ((long)i0 << 24) + ((long)i1 << 16) + ((long)i2 << 8) + (long)i3;
}

/**
 * Reads the NTP time stamp at the given offset in the buffer and returns 
 * it as a system time (milliseconds since January 1, 1970).
 */    
private long readTimeStamp(byte[] buffer, int offset) {
    long seconds = read32(buffer, offset);
    long fraction = read32(buffer, offset + 4);
    return ((seconds - OFFSET_1900_TO_1970) * 1000) + ((fraction * 1000L) / 0x100000000L);        
}

/**
 * Writes 0 as NTP starttime stamp in the buffer. --> Then NTP returns Time OFFSET since 1900
 */    
private void writeTimeStamp(byte[] buffer, int offset) {        
    int ofs =  offset++;

    for (int i=ofs;i<(ofs+8);i++)
      buffer[i] = (byte)(0);             
}

}

এবং এটি দিয়ে ব্যবহার করুন:

        long now = 0;

        NTP_UTC_Time client = new NTP_UTC_Time();

        if (client.requestTime("pool.ntp.org", 2000)) {              
          now = client.getNtpTime();
        }

ডেটটাইমস্ট্রিং ফাংশন হিসাবে আপনার যদি ইউটিসি সময় "এখন" দরকার হয়:

private String get_UTC_Datetime_from_timestamp(long timeStamp){

    try{

        Calendar cal = Calendar.getInstance();
        TimeZone tz = cal.getTimeZone();

        int tzt = tz.getOffset(System.currentTimeMillis());

        timeStamp -= tzt;

        // DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault());
        DateFormat sdf = new SimpleDateFormat();
        Date netDate = (new Date(timeStamp));
        return sdf.format(netDate);
    }
    catch(Exception ex){
        return "";
     }
    } 

এবং এটি দিয়ে ব্যবহার করুন:

String UTC_DateTime = get_UTC_Datetime_from_timestamp(now);

একক লাইনে <br/> <pre> <code> ক্যালেন্ডার utcTime = Calendar.getInstance ()। যোগ করুন (ক্যালেন্ডার.মিলিএসইসিএনডি, -টাইম্যাটসেটটাইমজোন ()। GetOffset (time.getTimeInMillis ())); </ p> < / কোড>
হারুন

1
হ্যাঁ, তবে এটি স্থানীয় ডিভাইস টাইমকে কল করে যা ব্যবহারকারী থেকে ম্যানুয়ালিটিকে একটি মিথ্যা ডেটটাইম-এ পরিবর্তন করতে পারে
ইনগো


1

এটাকে সহজ করে বলছি। একটি ক্যালেন্ডার অবজেক্ট টাইম জোন সম্পর্কিত তথ্য সঞ্চয় করে তবে আপনি যখন Cal.getTime () সম্পাদন করেন তখন সময় অঞ্চল তথ্য হারিয়ে যাবে। তাই টাইমজোন রূপান্তরগুলির জন্য আমি তারিখফর্ম্যাট ক্লাসগুলি ব্যবহার করার পরামর্শ দেব ...


1

এটি আমার বাস্তবায়ন:

public static String GetCurrentTimeStamp()
{
    Calendar cal=Calendar.getInstance();
    long offset = cal.getTimeZone().getOffset(System.currentTimeMillis());//if you want in UTC else remove it .
    return new java.sql.Timestamp(System.currentTimeMillis()+offset).toString();    
}

1

আপনি যদি তারিখটি বিশ্লেষণ এড়াতে এবং GMT এ কেবল একটি টাইমস্ট্যাম্প চান, আপনি এটি ব্যবহার করতে পারেন:

final Date gmt = new Timestamp(System.currentTimeMillis()
            - Calendar.getInstance().getTimeZone()
                    .getOffset(System.currentTimeMillis()));

0

যদি আপনি জোদা সময় ব্যবহার করেন এবং আপনার স্থানীয় অফসেট ব্যতীত বর্তমান সময়টি মিলি সেকেন্ডে চান তবে আপনি এটি ব্যবহার করতে পারেন:

long instant = DateTimeZone.UTC.getMillisKeepLocal(DateTimeZone.getDefault(), System.currentTimeMillis());

0
public class CurrentUtcDate 
{
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println("UTC Time is: " + dateFormat.format(date));
    }
}

আউটপুট:

UTC Time is: 22-01-2018 13:14:35

আপনি প্রয়োজন হিসাবে তারিখ বিন্যাস পরিবর্তন করতে পারেন।


1
দয়া করে বাচ্চাদের দীর্ঘকালীন এবং কুখ্যাতভাবে ঝামেলা ব্যবহার করতে শিখবেন না SimpleDateFormatjava.timeআধুনিক জাভা তারিখ এবং সময় এপিআইতে আজ আমরা আরও অনেক ভাল । এছাড়াও আপনি এমন কী সরবরাহ করছেন যা ইতিমধ্যে ড্যান, অ্যান্টোনিও এবং অন্যদের উত্তরে নেই?
ওলে ভিভি

2
(ক) এই উত্তরটি কয়েক ডজন বিদ্যমান উত্তরগুলির চেয়ে কীভাবে মূল্য যুক্ত করে? (খ) এখানে ব্যবহৃত ঝামেলাযুক্ত ক্লাসগুলি বহু বছর আগে আধুনিক জাভা.টাইম ক্লাসগুলি দ্বারা সংবহন করা হয়েছিল । 2018 এ তাদের ব্যবহারের পরামর্শ দেওয়া হ'ল দুর্বল পরামর্শ।
তুলসী বার্ক

0

Java.Time প্যাকেজ ব্যবহার করুন এবং নীচে কোড-

ZonedDateTime now = ZonedDateTime.now( ZoneOffset.UTC );

অথবা

LocalDateTime now2 = LocalDateTime.now( ZoneOffset.UTC );

আপনার অ্যাপ্লিকেশন প্রয়োজন উপর নির্ভর করে।


(ক) ZoneOffsetসময় অঞ্চল ( ZoneId) এর পরিবর্তে যদি অফসেট ( ) ব্যবহার করা হয় তবে OffsetDateTimeএটি তার চেয়ে বেশি উপযুক্ত ZonedDateTime। (খ) LocalDateTimeবর্তমান মুহুর্তটি ক্যাপচারের জন্য ব্যবহার করা উচিত নয় কারণ এতে টাইম জোন বা অফসেট-ইউটিসি -র ধারণা নেই। (গ) অন্যান্য পূর্ব-বিদ্যমান উত্তরগুলি এই উপাদানটিকে আচ্ছাদন করেছে এবং আরও ভাল কাজ করেছে। আমি দেখতে পাই না কীভাবে এই উত্তরটির সাথে মান যুক্ত হয়।
তুলিল বাউরক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.