তারিখ, ঘন্টা এবং মিনিটের সাথে কীভাবে আইএসও 8601 ফর্ম্যাটে বর্তমান মুহুর্তটি পাবেন?


323

ইউটিসির বর্তমান মুহুর্তের আইএসও 8601 ফর্ম্যাট উপস্থাপনা পাওয়ার সর্বাধিক মার্জিত উপায় কী ? এটা তোলে মত হওয়া উচিত: 2010-10-12T08:50Z

উদাহরণ:

String iso8601 = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);


5
@ মার্কোলপস সাবধান, একটি ব্যবহার private static SimpleDateFormatথ্রেড নিরাপদ নয়।
vegemite4me


এই অন্যান্য প্রশ্নের অনুরূপ , তবে এটি একটি পুরো দ্বিতীয়কে ছাঁটাই করে দেয় যেখানে এই প্রশ্নটি পুরো মুহুর্তে কেটে যায়।
বাসিল বাউরক

উত্তর:


292

আপনি চান যে SimpleDateFormatকোনও Dateবস্তুর বিন্যাস করতে ব্যবহার করুন :

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

new Date()উপরে প্রদর্শিত হিসাবে একটি ব্যবহার করা বর্তমান সময়ের ফর্ম্যাট করবে।


8
@ জোয়াচিম এই "স্ট্যান্ডার্ড" পদ্ধতির নেতিবাচক দিকটি হ'ল "yyyy-MM-dd'T'HH:mmZ"আমার অ্যাপ্লিকেশনটিতে আমার অনেক উদাহরণ থাকতে হবে, যতবারই আমাকে আইএসও -8601 ফর্ম্যাট করা তারিখের প্রয়োজন হয়। জোদাটাইম সহ, আমি যেমন দেখছি, আমি একটি পূর্বনির্ধারিত ফর্ম্যাটর ব্যবহার করতে পারি ISODateTimeFormat, যা আমার জন্য এই কাজটি করে ..
yegor256

8
@Joachim, ZSimpleDateFormat বৈধ প্যাটার্ন, বরং এই কাজ হল: yyyy-MM-dd'T'HH:mm'Z'
বুহাকে সিন্ধি

33
-1 এটি আপনাকে বর্তমান টাইমজোন - তারিখ / সময় দেয় - ইউটিসি নয়। কার্লোসের উত্তরে প্রয়োজনীয় ইউটিসি কোড অন্তর্ভুক্ত রয়েছে।
স্কট রিপ্পি

16
আমি কেবল টাইমজোন ভুলটি স্থির করেছি - যেহেতু এটি গৃহীত উত্তর তাই আমি মনে করি এটি করা ঠিক ছিল thing
BoD

2
জেডকে "yyyy-MM-dd'T'HH: mm'Z '" এর মতো উদ্ধৃতি দেওয়া দরকার
কিমবল রবিনসন

224

সিস্টেমগুলির জন্য যেখানে ডিফল্ট সময় অঞ্চলটি ইউটিসি নয়:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

SimpleDateFormatযদি ঘন ঘন প্রয়োজন উদাহরণস্বরূপ একটি বিশ্বব্যাপী ধ্রুবক হিসেবে ঘোষণা হতে পারে, কিন্তু হুঁশিয়ার করে এই শ্রেণীর থ্রেড-নিরাপদ নয়। একসাথে একাধিক থ্রেড দ্বারা অ্যাক্সেস করা হলে এটি সিঙ্ক্রোনাইজ করতে হবে।

সম্পাদনা: আমি বিভিন্ন সময় / তারিখের ম্যানিপুলেশনগুলি
সম্পাদন করে জোদা সময়কে অগ্রাধিকার দেব ... সম্পাদনা 2: সংশোধন করা: setTimeZoneকোনও স্ট্রিং গ্রহণ করে না (পল দ্বারা সংশোধিত)


9
এই ফর্ম্যাটটি কোথাও লাইব্রেরিতে নির্মিত কোনও স্থির নয়?
ড্যানিয়েল ক্যাপলান

'তারিখফর্ম্যাট' এর জন্য দুটি পৃথক প্যাকেজ রয়েছে, 'আমদানি java.text.DateFormat' ব্যবহার করতে মনে রাখবেন
ওববার

3
আপনি যদি বর্তমান সময় অঞ্চলটি চান তবে টাইমজোন tz = টাইমজোন.সেট ডিফল্ট () ব্যবহার করুন; পরিবর্তে
ওববার

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

@ ম্যাটওয়াহ্পল - তবে আপনি যদি অব্যক্ত জেড ব্যবহার করেন তবে ফলাফলটি এরকম কিছু হবে 2016-06-14T13:56+0000- প্রশ্নটি এমন কিছু 2016-06-14T13:56Z
চাইছে

184

জাভা 8 নেটিভ

জাভা.টাইম জাভা ৮ এর পর থেকে এটিকে সহজ করে তোলে।

ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )

ফলাফল: 2015-04-14T11:07:36.639Z

আপনি লাইটার Temporalযেমন Instantবা ব্যবহারের জন্য প্রলুব্ধ হতে পারেন LocalDateTimeতবে এগুলিতে ফরম্যাটার সমর্থন বা টাইম জোন ডেটার অভাব রয়েছে। কেবল ZonedDateTimeবাক্সের বাইরে কাজ করে।

টিউনিং বা বিকল্প / অপারেশন chaining দ্বারা ZonedDateTime এবং DateTimeFormatter , আপনি সহজেই নিয়ন্ত্রণ করতে পারেন সময় অঞ্চল এবং স্পষ্টতা , একটি নির্দিষ্ট মাত্রায়:

ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
             .truncatedTo( ChronoUnit.MINUTES )
             .format( DateTimeFormatter.ISO_DATE_TIME )

ফলাফল: 2015-04-14T11:07:00+01:00[Europe/Paris]

পরিমার্জিত প্রয়োজনীয়তা যেমন সেকেন্ডের অংশটি সরিয়ে ফেলা এখনও কাস্টম ফর্ম্যাট বা কাস্টম পোস্ট প্রক্রিয়া দ্বারা পরিবেশন করা উচিত।

.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07

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


9
ভাল উত্তর. জেভিএমের বর্তমান ডিফল্ট টাইম জোনের উপর স্পষ্টভাবে নির্ভর করার পরিবর্তে সময় অঞ্চলকে স্পষ্টভাবে নির্দিষ্ট করার ভাল অভ্যাসটি লক্ষ্য করুন । আপনি চাইলে নির্দিষ্ট সময় অঞ্চল নির্দিষ্ট করতে পারেন, যেমন ZoneId.of( "America/Montreal" )
তুলসী বাউরক

1
তাত্ক্ষণিক এটি কেবল .toString () পদ্ধতিতে কল করে আইএসও 8601 ফর্ম্যাটে ফর্ম্যাট করতে দেয়:return DateTimeFormatter.ISO_INSTANT.format(this);
ভডিয়ামভিএল

এটি সর্বোত্তম কারণ আপনি ডিফল্ট এড়ান।
ক্রিস্টোফ রাউসি

6
সতর্কতা: জাভা 8 এর আইসিওএনএসপিএসএনটিটি ব্যবহার করে সমাধানের জন্য বিরক্তিকর উদ্ভট ঘটনা রয়েছে। যখন মিলিসেকেন্ডগুলি 0 হয় তখন সেগুলি আউটপুটে অন্তর্ভুক্ত হয় না। আইএসও 8601 স্ট্যান্ডার্ড অনুযায়ী এটি অনুমোদিত তবে অন্যান্য ভাষায় অনেক লাইব্রেরি এবং পার্সার যে ক্ষমাকারী নয়। এর পরিবর্তে শূন্যগুলি সর্বদা এটি অন্তর্ভুক্ত করা প্রয়োজন: ডেটটাইম ফর্ম্যাটটার আইএসও_8601 = অফ প্যাটার্ন ("yyyy-MM-dd'T'HH: মিমি: এসএসএসএসএক্স") ।জোন (ইউটিসি);
জুরজান

জাভা 8 থেকে 11 এ স্যুইচ করার পরে, আমি 3 টির বিপরীতে সেকেন্ড পরে 6 টি সংখ্যা দেখছি DateTimeFormatter.ISO_INSTANTএবং DateTimeFormatter.ISO_DATE_TIMEব্যবহার করছি যা স্প্রিংয়ের দ্বারা আর আপ করা হয় না @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
ড্যানিয়েলএম

126

জাভা 8:

thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
                              .withZone(ZoneOffset.UTC)
                              .format(Instant.now());

প্রাক জাভা 8:

thisMoment = String.format("%tFT%<tRZ",
                           Calendar.getInstance(TimeZone.getTimeZone("Z")));

দস্তাবেজগুলি থেকে :

'R'    24% ঘড়ির জন্য "% tH:% tM"
'F'    আইএসও 8601 সম্পূর্ণ তারিখ "% tY-% tm-% td" হিসাবে ফর্ম্যাট করার সময় ফর্ম্যাটেড সময়


26
ভাল, হয় আপনি আপনার প্রকল্পের নির্ভরতা হিসাবে একটি অতিরিক্ত তৃতীয় পক্ষের লাইব্রেরি অন্তর্ভুক্ত করেন (যা আপনি আপ টু ডেট রাখতে চান এবং আপনার অ্যাপ্লিকেশনটি দিয়ে শিপ করতে পারেন, আরে, এটি কেবল অতিরিক্ত একটি অতিরিক্ত 3.2 মেগাবাইট) এবং করুন DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); String str = fmt.print(dt);, বা আপনি এনক্যাপসুলেট করবেন return String.format("%tFT%<tRZ", new Date());একটি ক্লাসে প্রবেশ করুন এবং করুন str = Iso8601Time.now(), যেখানে আপনার কখনই এটি প্রয়োজন। (এটি আইএসও ফর্ম্যাটটি বদলাতে চলেছে এমন নয়)) যদি এটি প্রমাণিত হয় যে আইএসও ফর্ম্যাটে আপনার এখনকার তারিখের চেয়ে আরও বেশি প্রয়োজন, তবে একটি lib ব্যবহার করুন।
আইয়ুব

2
সম্পূর্ণরূপে এটির সাথে একমত।
ইয়েগোর 256

3
নোট করুন যে কোন উত্তরটি গ্রহণযোগ্য হিসাবে চিহ্নিত হয়েছে তা পরিবর্তন করা সম্ভব ;-)
আইওউব

8
%tFT%<tTZসেকেন্ড অন্তর্ভুক্ত করা হবে; %tFT%<tTZ.%<tLমিলিসেকেন্ড অন্তর্ভুক্ত করা হবে।
প্যাট্রিক লিনস্কি 5'12

2
একটি খুব ঝরঝরে সমাধান, এখনই গ্রহণযোগ্য উত্তর হওয়া উচিত :)
আবদেলহাদি

94

জাভা 8 হিসাবে আপনি সহজভাবে করতে পারেন:

Instant.now().toString();

java.time.Instantদস্তাবেজগুলি থেকে :

এখন

public static Instant now()

সিস্টেমের ঘড়ি থেকে বর্তমান তাত্ক্ষণিকতা অর্জন করে।

এটি বর্তমান তাত্ক্ষণিকতা পেতে সিস্টেম ইউটিসি ঘড়িকে জিজ্ঞাসা করবে ।

 


public String toString()

আইএসও -8601 উপস্থাপনা ব্যবহার করে এই তাত্ক্ষণিকের একটি স্ট্রিং প্রতিনিধিত্ব।

ব্যবহৃত বিন্যাসটি একই DateTimeFormatter.ISO_INSTANT


11
এটি সঠিক উত্তর, এবং এটি এমন একটি কেলেঙ্কারি যা এই সমস্ত কনককটেডের চেয়ে বেশি উত্থাপিত হয়নি SimpleDateFormats
ডেভিড মোলস

আমি আরও উত্তর পড়তে খুশি। আমি একমত, এখনই এই উত্তর হওয়া উচিত।
সান-কুন ক্লার্ক-ডেভিস

এবং কারণ এটি toString, বেশিরভাগ ক্ষেত্রে আপনাকে এমনকি এটিকে স্পষ্টভাবে কল করার দরকার নেই।
কেয়া 3

1
পূর্ববর্তী উত্তরের মন্তব্যে সতর্কতা এখানেও প্রযোজ্য: "সতর্কতা: আইএসওএসপিএসএনটি ব্যবহার করে জাভা 8 এর সমাধানের জন্য একটি বিরক্তিকর উদ্দীপনা রয়েছে When স্ট্যান্ডার্ড তবে অনেক লাইব্রেরি এবং অন্যান্য ভাষায় পার্সারগুলি ক্ষমাকারী নয়। "
ডেভ এল।

27

জোদাটাইম ব্যবহার করুন

আইএসও 8601 ক্যালেন্ডার সিস্টেমটি জোদা-সময়ের মধ্যে ডিফল্ট বাস্তবায়ন is

জোডটাইম ফর্ম্যাটারের জন্য এখানে ডক is

সম্পাদনা:

আপনি যদি যোগ করতে না চান বা উপরের লাইব্রেরি যুক্ত করার মান না দেখেন তবে বিল্ড SimpleDateFormatক্লাসে ব্যবহারের জন্য তারিখের প্রয়োজনীয় ISO ফর্ম্যাট করতে পারেন

@ জোছিম সৌর দ্বারা প্রস্তাবিত

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());

3
এবং প্রশ্নের মধ্যে আপনি কীভাবে স্ট্রিং তৈরি করতে পারবেন?
জোচিম সউর

4
আমি বলব এটির মতো সহজ কিছু (যা জাভা-কোডের দুটি লাইন দিয়ে অর্জন করা যায়) এর জন্য একটি গ্রন্থাগার-নির্ভরতা যুক্ত করবেন না। (অবশ্যই, যদি প্রয়োজনীয়তাগুলি বাড়তে থাকে তবে এটি অন্য গল্প))
আইওউব

1
@ আইয়ুব, এটি যদি অ্যাপ্লিকেশনের বেশ কয়েকটি অংশে স্রেফ ব্যবহৃত হয় তবে ডিফল্ট হয়ে যাওয়া ঠিক আছে, বিশ্রামের ক্ষেত্রে জোডাটাইম আরও ভাল।
জিগার জোশী

5
@ আইওব জোদাতিমে যে কোনও ক্ষেত্রে ভাল, কারণ এটি রয়েছে ISODateTimeFormat- আইএসও -8601 এর একটি পূর্বনির্ধারিত ফর্ম্যাটর।
yegor256

3
@ org.Live.java: যা কেবল তখনই প্রাসঙ্গিক যখন আপনি জোড সময়কে সঠিকভাবে স্যুইচ করতে পারবেন। আপনি জোদা সময়ের এই ফাংশনটি ব্যবহার করার সময় আপনার সেগুলি থাকবে না।
জোচিম সউর

20

অ্যাপাচি থেকে ডেটফর্ম্যাট ইউটিলেcommons-lang3 দরকারী ধ্রুবক রয়েছে, উদাহরণস্বরূপ:DateFormatUtils.ISO_DATETIME_FORMAT


3
আরো সঠিকভাবে, ইউটিসি বর্তমান মুহুর্ত: DateFormatUtils.format(new Date(), "yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"));ডিফল্ট সময় জোন বর্তমান মুহুর্ত: DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(new Date()); @ ইয়েগর 256 উল্লেখ করার জন্য ধন্যবাদ DateFormatUtils, বোর্ডে অ্যাপাচি কমন্স-ল্যাং এ থাকা তারিখের ফর্ম্যাটটি ব্যবহার করা উপযুক্ত।
বাবিনিক

19

আপনি যদি জোডাটাইমকে অন্তর্ভুক্ত করতে না চান (এটি যতটা সুন্দর)

javax.xml.bind.DatatypeConverter.printDateTime(
    Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);

যা এর স্ট্রিং প্রদান করে:

2012-07-10T16:02:48.440Z

যা মূল অনুরোধের থেকে কিছুটা আলাদা তবে এখনও আইএসও -8601।



10

Joda-টাইম

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

জোডা-টাইম লাইব্রেরি ব্যবহার করে …

String output = new DateTime( DateTimeZone.UTC ).toString() ;

এটি থ্রেড-নিরাপদ। জোডা-টাইম বিদ্যমান বস্তুগুলি পরিবর্তনের পরিবর্তে নতুন স্থাবর বস্তু তৈরি করে।

আপনি যদি সত্যিই কয়েক মিনিটের মধ্যে সমাধান করে কয়েক সেকেন্ড ছাড়াই বিন্যাসের জন্য জিজ্ঞাসা করতে চান, তবে জোদা-টাইমের অনেকগুলি অন্তর্নির্মিত বিন্যাসগুলির মধ্যে একটি ব্যবহার করুন।

DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;

java.time

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

আধুনিক সমাধানের জন্য আমার অন্যান্য উত্তর দেখুন ।


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

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

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

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

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

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

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


7

জাভা সংস্করণ 7 এর জন্য

আপনি ওরাকল ডকুমেন্টেশন অনুসরণ করতে পারেন: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDate Format.html

এক্স - আইএসও 8601 টাইম জোনের জন্য ব্যবহৃত হয়

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

System.out.println(nowAsISO);

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
//nowAsISO = "2013-05-31T00:00:00Z";
Date finalResult = df1.parse(nowAsISO);

System.out.println(finalResult);

5

আপনি আইএসও 8601 এর জন্য নিম্নলিখিত প্যাটার্নটির সাথে জাভার সিম্পলডেট ফরমেট ব্যবহার করতে পারেন yyyy-MM-dd'T'HH:mm:ssXXX

নমুনা কোড: (সমস্ত উপলব্ধ সময় অঞ্চলগুলির জন্য তালিকাবদ্ধ)

for (String timeZone : TimeZone.getAvailableIDs())
{
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
    String formatted = dateFormat.format(new Date());
    System.out.print(formatted);

    if (formatted.endsWith("Z"))
    {
        // These time zone's have offset of '0' from GMT.
        System.out.print("\t(" + timeZone + ")");
    }

    System.out.println();
}

আপনি ব্যবহার করতে পারেন:

TimeZone.getDefault ()

ডিফল্ট ভিএম টাইমজোন জন্য। আরও এখানে

আপনি শেষ হতে পারে এমন কয়েকটি টাইম জোনের তারিখের সময়টি লক্ষ্য করতে পারেন 'Z'। এই সময় অঞ্চলগুলি '0'GMT থেকে অফসেট করেছে ।

আরও তথ্য এখানে পাওয়া যাবে


5

আমি বিশ্বাস করি যে সহজতম উপায় হ'ল প্রথমে তাত্ক্ষণিকভাবে এবং তারপরে স্ট্রিংয়ে যাওয়া:

String d = new Date().toInstant().toString();

যার ফলশ্রুতিতে হবে:

2017-09-08T12:56:45.331Z


4
আপনি যদি বর্তমান সময়টি চান তবে কোনও পুরানো ফ্যাশন Dateঅবজেক্টের মধ্য দিয়ে যাওয়ার দরকার নেই । শুধু কর Instant.now().toString()। যদি আপনি Dateকোনও উত্তরাধিকার এপিআই থেকে একটি পেয়ে থাকেন তবে আপনার পদ্ধতিটি সেরা best
ওলে ভিভি

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

5

TL; ড

অন্যান্য উত্তরগুলির মধ্যে কিছু জাভা.টাইম ক্লাসের প্রস্তাব দেওয়ার ক্ষেত্রে সঠিক তবে আপনার নির্দিষ্ট প্রয়োজনের জন্য অপ্রয়োজনীয় দৈর্ঘ্য ব্যবহার করতে হবে।

Instant.now()                               // Capture the current moment in UTC with a resolution as fines nanoseconds but usually in microseconds or milliseconds.
       .truncatedTo( ChronoUnit.MINUTES )   // Lop off any seconds or fractional second, to get a value in whole minutes.
       .toString()                          // Generate a String in standard ISO 8601 format where a `T` separates the year-month-day from the hour-minute-second, and the `Z` on the end for “Zulu” means UTC.

2018-01-23T12: 34Z

Instant::toString

jav.time.Instantবর্গ, ইউটিসি একটি মুহূর্ত প্রতিনিধিত্ব করে সবসময় ইউটিসি হবে।

Instant instant = Instant.now() ;

instant.toString (): 2018-01-23T12: 34: 56.123456Z

Zআপনার উদাহরণ স্ট্রিং এর প্রান্তে 2010-10-12T08:50Zউচ্চারিত "জুলু" এবং অর্থ হয় ইউটিসি

আপনার কাঙ্ক্ষিত ফর্ম্যাটটি আইএসও 8601 মান মেনে চলার জন্য ঘটে । Java.time শ্রেণীর / যখন পার্স স্ট্রিং উৎপাদিত ডিফল্টরূপে এই মান বিন্যাসে ব্যবহার করুন। সুতরাং একটি বিন্যাস প্যাটার্ন নির্দিষ্ট করার প্রয়োজন নেই। Instant::toStringউপরোক্ত হিসাবে কেবল কল করুন ।

আপনি যদি বিশেষত দ্বিতীয় বা ভগ্নাংশ দ্বিতীয় ছাড়াই পুরো মিনিট চান, তবে কেটে ফেলুন। ChronoUnitক্লাসের মাধ্যমে সময়ের একক নির্দিষ্ট করুন ।

Instant instant = Instant.now().truncatedTo( ChronoUnit.MINUTES ) ;
String output = instant.toString();  // Generate a `String` object in standard ISO 8601 format.

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

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

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

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

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

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

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


2

এখানে পুরো ক্লাসটি অনুকূলিত করা হয়েছে যাতে "এখন ()" কে আহ্বান করা এর মতো আরও কিছু না করে।

public class Iso8601Util
{
    private static TimeZone tz = TimeZone.getTimeZone("UTC");
    private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

    static
    {
        df.setTimeZone(tz);
    }

    public static String now()
    {
        return df.format(new Date());
    }
}

9
এটিকে স্থিতিশীল করা সমস্যার কারণ হতে পারে কারণ সিম্পলডিটফর্ম্যাট থ্রেডটি নিরাপদ নয়: "তারিখের ফর্ম্যাটগুলি সিঙ্ক্রোনাইজ করা হয় না each প্রতিটি থ্রেডের জন্য পৃথক ফর্ম্যাট উদাহরণ তৈরি করার পরামর্শ দেওয়া হয় multiple docs.oracle.com/javase/7/docs/api/java/text/…
জুহা Palomäki

2
@ জুহা পালোমকি যেমন উল্লেখ করেছেন, এটি থ্রেডসেফ নয়। আপনি যদি জাভা 8 বা তার বেশি ব্যবহার করেন তবে থ্রেডলোকাল.উইথিটাল এটি ঠিক করতে পারে। আপনি যদি জাভা 7 বা তার চেয়ে কম ব্যবহার করছেন তবে একটি নতুন থ্রেডলোকাল তৈরি করুন এবং থ্রেডলোক্যাল ইন্টিটিয়্যালভ্যালু
ব্যবহারকারী 393274

@ user393274 - আপনি জাভা 8 ব্যবহার করছেন আপনি ব্যবহার করা উচিত Instant, DateTimeFormatএবং অন্যান্য আধুনিক থ্রেড নিরাপদ প্রতিস্থাপন

সিম্পলডেট ফরমেট থ্রেড নিরাপদ না হওয়ায় সমস্যাটি কী তা নিয়ে আমি কিছুটা বিস্মিত। যদি দুটি থ্রেড একই সাথে স্ট্যাটিক ইনিশিয়ালাইজার কার্যকর করে, আমি সিম্পলডেট ফরমেট কনস্ট্রাক্টরকে দু'বার ডাকার চেয়ে খারাপ আর কিছু হতে পারে না তবে এর মধ্যে কেবলমাত্র একটি তাত্ক্ষণিক (শেষ হওয়া শেষ) "ডিএফ" হিসাবে রেকর্ড হয়ে যায়।
gilbertpilz

2
private static String getCurrentDateIso()
{
    // Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    return dateFormat.format(new Date());
}

1

তবুও, জোডা-টাইম কেবল বর্ধিত ফর্ম্যাটটিকে সমর্থন করে: "2015-12-09T00: 22: 42.930Z" "মৌলিক নয়:" 20151209T002242.930Z "... জাভা সিম্পলডেট ফরমেটের সাথে ফর্ম্যাটগুলির একটি তালিকা পরীক্ষা করার চেয়ে আমরা আরও ভাল হতে পারি।


1

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

private static final String GMT = "GMT";
private static final String DATE_FORMAT_ISO = "yyyyMMdd'T'HHmmss";

public static Calendar isoToCalendar(final String inputDate) {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(GMT));
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_ISO, Locale.US);
        dateFormat.setTimeZone(TimeZone.getTimeZone(GMT));
        Date date = dateFormat.parse(inputDate);
        calendar.setTime(date);
    } catch (ParseException e) {
        Log.e("TAG",e.getMessage());
    }
    return calendar;
}

স্মরণ করুন: তারিখ শ্রেণি টাইমজোন অস্তিত্ব সম্পর্কে জানে না। এই কারণে আপনি যদি একটি তারিখ ডিবাগ করেন তবে আপনি সর্বদা আপনার বর্তমান টাইমজোনটির তারিখটি দেখতে পান।


1

আপনি যদি পারফরম্যান্সের বিষয়ে চিন্তা করেন তবে আমি একটি লাইব্রেরি তৈরি করেছি যা আইএসও 8601-ফর্ম্যাটেড তারিখগুলির সাথে ম্যানিপুলেটেটিংয়ে স্ট্যান্ডার্ড জাভা পার্সার এবং ফরম্যাটারকে ছাড়িয়ে যায়। ডেটটাইমপ্রসেসর বাস্তবায়নগুলি থ্রেড-নিরাপদ এবং সমবর্তী মানচিত্র বা স্থির ক্ষেত্রগুলিতে ক্যাশে করা যায়।

<dependency>
  <groupId>com.axibase</groupId>
  <artifactId>date-processor</artifactId>
  <version>1.0.3</version>
</dependency>
import com.axibase.date.DatetimeProcessor;
import com.axibase.date.PatternResolver;
import org.junit.Before;
import org.junit.Test;

import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

public class DateFormatTest {
    private Clock clock;

    @Before
    public void prepare() {
        clock = Clock.fixed(Instant.ofEpochMilli(1571285405300L), ZoneId.of("Europe/Berlin"));
    }

    @Test
    public void testIsoMillis(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10:05.300Z"));
    }

    @Test
    public void testIsoMillisLocalZone(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), clock.getZone()), is("2019-10-17T06:10:05.300+02:00"));
    }

    @Test
    public void testIsoMinutes(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("yyyy-MM-ddTHH:mmXXX");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10Z"));
    }
}

0

তারিখ থেকে তাত্ক্ষণিকভাবে যাওয়ার জন্য তাদের কোনও প্রকার সহজ উপায় এবং একটি পদ্ধতিও বলা উচিত ছিল toISO8601, যা অনেক লোক সন্ধান করছে। অন্যান্য উত্তরগুলির পরিপূরক হিসাবে, java.util.Date থেকে ISO 8601 ফর্ম্যাট পর্যন্ত:

Instant.ofEpochMilli(date.getTime()).toString();

স্বতঃসমাপ্তি ব্যবহার করার সময় এটি সত্যই দৃশ্যমান নয় তবে java.time.Instant.toString():

আইএসও -8601 ব্যবহার করে এই তাত্ক্ষণিকের একটি স্ট্রিং প্রতিনিধিত্ব


0
DateTimeFormatter.ISO_DATE_TIME
        .withZone(ZoneOffset.UTC)
        .format(yourDateObject.toInstant())

যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
বিশাল ছোটোয়ানি

-2

এটা চেষ্টা কর,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
        String date=sdf.format (new Date() );

এটি আইএসও 8601 ফর্ম্যাটের জন্য


2
এটি ভুল সময় অঞ্চলে তারিখগুলি ব্যবহার করবে, কার্লোসের উত্তর দেখুন।
স্টায়ান সোয়েল্যান্ড-রেয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.