জাভা সিম্পলডেটফর্ম্যাট ("yYYY-MM-dd'THH: মিমি: ss'Z '") টাইমজোনকে IST হিসাবে দেয়


148

আমার মতো সিম্পলডেট ফরমেট কনস্ট্রাক্টর রয়েছে

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")

এবং আমি স্ট্রিং পার্সিং করছি "2013-09-29T18:46:19Z".

আমি পড়েছি যে এখানে জেড GMT/UTCসময় অঞ্চলকে উপস্থাপন করে । তবে যখন আমি কনসোলে এই তারিখটি মুদ্রণ করি তখন এটি প্রত্যাবর্তিত তারিখের জন্য আইএসটি টাইমজেন প্রিন্ট করে।

এখন আমার প্রশ্ন হ'ল আমার আউটপুটটি সঠিক নাকি ভুল?


3
হ্যাঁ এটি 'জেড' প্রতিনিধিত্ব করে। জেড
উডি

5
জেড = জুলু সময় => জিএমটি + ০, আপনি সম্ভবত আপনার দেশের সেবা করেননি;)
মুশপিস

উত্তর:


251

আপনি টাইমজোনটি কেবল Zতারিখ / সময় শেষে যোগ করেছেন , তাই এটি GMT তারিখ / সময়ের মতো দেখাবে কিন্তু এর মান পরিবর্তন হয় না।

টাইমজোনটি GMT এ সেট করুন এবং এটি সঠিক হবে।

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

3
আপনার যদি একটি তারিখ থাকে তবে 2012-12-06T06: 00: 00 Z ব্যতীত এটি জিএমটিকে উপস্থাপন করে?
বাইনারিগিনিট

3
@ বাইনারিজিট যারা আপনাকে এটি পাঠিয়েছে তাদের আপনাকে জিজ্ঞাসা করতে হবে। এটি প্রেরকের স্থানীয় সময় হতে পারে।
পিটার লরি 21

2
টাইমজোনটি "ইউটিসি"
প্রশান্ত

2
বিভিন্ন লাইব্রেরির জন্য অনেক জায়গায় টাইমজোন সেট করার পরিবর্তে এবং আপনার মেশিন / ল্যাপটপের টাইমজোনগুলির সাথে দ্বন্দ্ব এড়ানোর পরিবর্তে, আপনি সর্বদা ইউটিআর টাইমজোন সিস্টেম সম্পত্তি সেট করে JVM- এর ডিফল্ট টাইমজোনটি সেট করা উচিত: জাভা -ডুজার.টাইমজোন = GMT ...
কিসনা

100

'T'এবং 'Z'এখানে ধ্রুবক হিসাবে বিবেচিত হয়। আপনাকে Zউদ্ধৃতিগুলি ছাড়াই পাস করতে হবে । তবুও আপনাকে ইনপুট স্ট্রিংয়ের সময় অঞ্চল নির্দিষ্ট করতে হবে।

উদাহরণ: 2013-09-29T18:46:19-0700 এবং হিসাবে বিন্যাস"yyyy-MM-dd'T'HH:mm:ssZ"


সুবীর, আপনার উত্তরের জন্য ধন্যবাদ, তবে ইনপুট স্ট্রিংয়ে "0700" যুক্ত কী ??
প্রদীপ বোর্ডে

-0700সময় অঞ্চলটি হল -7: 00 ঘন্টা
সুবীর কুমার সাও

12
-07: 00 ঘন্টা এবং না -0700 এর জন্য নিম্নলিখিতটি হবে: yyyy-MM-dd'T'H: মিমি: এসএসএসএক্সএক্সএক্স
টাস্টিবাউনারিজ

48

আইএসও 8601 স্ট্রিং থেকে জাভা ডেট অবজেক্টে

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
sdf.parse("2013-09-29T18:46:19Z"); //prints-> Mon Sep 30 02:46:19 CST 2013

যদি আপনি সেট না করেন TimeZone.getTimeZone("GMT")তবে এটি আউটপুট হবেSun Sep 29 18:46:19 CST 2013

জাভা তারিখ অবজেক্ট থেকে আইএসও 8601 স্ট্রিংয়ে

এবং Dateআইএসও 8601 স্ট্যান্ডার্ড ( yyyy-MM-dd'T'HH:mm:ss'Z') এ রূপান্তর করতে নিম্নলিখিত কোড ব্যবহার করুন

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));           
System.out.println(sdf.format(new Date())); //-prints-> 2015-01-22T03:23:26Z

' 'জেড yyyy-MM-dd'T'HH:mm:ssZপ্রিন্ট ছাড়াই এটিও নোট করুন2015-01-22T03:41:02+0000


2
এটি আমাকে java.text.ParseException দেয়: আনসারসিয়েবল তারিখ: "2018-05-01T18: 30: 00.000Z" @AZ_
মনসুউ ....

41

আপনি 'পরিচালনা করতে চান মান তারপর ভাল এই প্যাটার্ন ব্যবহার করতে' তারিখ তাদেরকে JSON উপস্থাপনা: "yyyy-MM-dd'T'HH:mm:ssX"

লক্ষ্য করুন Xপ্রান্তে। এটি আইএসও 8601 স্ট্যান্ডার্ডে টাইমজোনগুলি পরিচালনা করবে এবং আইএসও 8601 ঠিক জাভাস্ক্রিপ্টে এই বিবৃতিটি উত্পন্ন করেnew Date().toJSON()

অন্যান্য উত্তরের সাথে তুলনা করলে এর কিছু সুবিধা রয়েছে:

  1. GMT এ আপনার ক্লায়েন্টদের তারিখ প্রেরণের দরকার নেই to
  2. এটি ব্যবহার করে আপনার স্পষ্টভাবে আপনার তারিখের অবজেক্টটি GMT এ রূপান্তর করতে হবে না: sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

1
আমি playস্বয়ংক্রিয় ফর্ম বাঁধাই ব্যবহার করছি , এবং @Format.DateTimeটীকা ব্যবহার করি । Zশেষ হওয়ার সাথে সাথে ডিফল্ট প্যাটার্নটি ব্যবহার করা ভুল বলে মনে হয়। পরিবর্তিত হওয়ার পরে X, এটি কাজ করে। অনেক ধন্যবাদ

যদি আপনার তারিখটি "-0500" এর মতো কোনও আরএফসি 822-অনুবর্তী ফ্যাশনের সময় অঞ্চল নির্দিষ্ট করে, তবে এটি দুর্দান্ত কাজ করে। তবে "2013-07-15T10: 22: 17-05: 00" (বৈধ ISO8601 টিজেড) এর মতো একটি তারিখের জন্য এই ব্রেক হয়। সেক্ষেত্রে আপনাকে "yyyy-MM-dd'T'HH: মিমি: এসএসএক্সএক্সএক্সএক্স" ব্যবহার করতে হবে।
ল্যাম্বার্ট

23

TL; ড

অন্যান্য উত্তরগুলি জাভা 8 হিসাবে প্রকাশিত।

Instant                           // Represent a moment in UTC. 
.parse( "2013-09-29T18:46:19Z" )  // Parse text in standard ISO 8601 format where the `Z` means UTC, pronounces “Zulu”.
.atZone(                          // Adjust from UTC to a time zone. 
    ZoneId.of( "Asia/Kolkata" )
)                                 // Returns a `ZonedDateTime` object. 

আইএসও 8601

আপনার স্ট্রিং ফর্ম্যাটটি আইএসও 8601 মেনে চলার জন্য ঘটে মান । এই মানটি পাঠ্য হিসাবে বিভিন্ন তারিখ-সময় মানগুলি উপস্থাপনের জন্য বোধগম্য বিন্যাসগুলি সংজ্ঞায়িত করে।

java.time

পুরানো java.util.Date/ .Calendarএবং java.text.SimpleDateFormatক্লাসগুলি জাভা time এবং তার পরে জাভা.টাইম ফ্রেমওয়ার্ক দ্বারা নির্মিত হয়েছে। টিউটোরিয়াল দেখুন । পুরানো শ্রেণিগুলি এড়ান কারণ তারা খারাপভাবে নকশাকৃত, বিভ্রান্তিকর এবং সমস্যাযুক্ত বলে প্রমাণিত হয়েছে।

পুরানো শ্রেণীর দুর্বল নকশার অংশটি আপনাকে কামড় দিয়েছে, যেখানে toStringইউটিসি (জিএমটি) -এর তারিখ-সময় মূল্যের একটি পাঠ্য উপস্থাপনা তৈরি করার সময় পদ্ধতিটি জেভিএমের বর্তমান ডিফল্ট সময় অঞ্চল প্রয়োগ করে; সুচিন্তিত তবে বিভ্রান্তিকর

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

একটি Instantমধ্যে টাইমলাইনে একটি মুহূর্ত ইউটিসি

Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );

আপনি কোনও অবজেক্ট তৈরি করার জন্য সময় অঞ্চল প্রয়োগ করতে পারেন ZonedDateTime

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

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


22

এবং যদি আপনার জাভা 8 এ যাওয়ার আরও ভাল উপায় না থাকে তবে 'yyyy-MM-dd'T'HH: মিমি: এসএসএক্স এক্সএক্স ' ব্যবহার করুন কারণ এটি আবার সঠিকভাবে পার্স হয়ে যায় (যখন কেবলমাত্র একটি এক্স এর সাথে এটি নাও হতে পারে। .. আপনার পার্সিং ফাংশন উপর নির্ভর করে)

এক্স উত্পন্ন: +01

XXX উত্পন্ন: +01: 00


0

জাভা 8 এর জন্য: টাইপসের java.time.format.DateTimeFormatterকোনও সম্ভাবনা হ্রাস করতে আপনি ইনবিল্ট ব্যবহার করতে পারেন , পছন্দ করুন

DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;

ISO_ZONED_DATE_TIME প্রতিনিধিত্ব 2011-12-03T10:15:30+01:00[Europe/Paris]করে ওরাকল লিঙ্কের সরবরাহিত বান্ডিল স্ট্যান্ডার্ড ডেটটাইম ফর্ম্যাটগুলির মধ্যে একটি

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