জোদা টাইম লাইব্রেরি ব্যবহার করে একটি তারিখের স্ট্রিংটিকে ডেটটাইম অবজেক্টে রূপান্তর করা


246

নিম্নলিখিত ফর্ম্যাটে স্ট্রিং হিসাবে আমার একটি তারিখ রয়েছে "04/02/2011 20:27:05"। আমি জোদা-টাইম লাইব্রেরিটি ব্যবহার করছি এবং এটিকে DateTimeঅবজেক্টে রূপান্তর করতে চাই । আমি করেছিলাম:

DateTime dt = new DateTime("04/02/2011 20:27:05")

তবে আমি নিম্নলিখিত ত্রুটি পাচ্ছি:

Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"

উপরের তারিখটিকে কোনও DateTimeবস্তুতে কীভাবে রূপান্তর করবেন ?


2
java.timeজাভা 8- এ প্যাকেজটি ব্যবহার করে কীভাবে তারিখ স্ট্রিংগুলি পার্স করা যায় তা সন্ধান করার জন্য এখানে আসার যে কেউ, তার জন্য LocalDateTime.parseবা ব্যবহার করে দেখুন Instant.parse
হেনিনি

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

উত্তর:


477

ব্যবহার DateTimeFormat:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);

2
হাই, এটি কি সম্ভব যে ফর্ম্যাটরটি টাইমজোনগুলি গ্রহণ করে না? "ZZ" আয় "Mez", যখন আবেদন toStringফাংশন, কিন্তু আমি এটা থেকে পার্স পারে না: Invalid format: "31. Januar 2013 06:38:08 MEZ" is malformed at "MEZ"। এটা কি একটা জানা ব্যাপার? আমি কীভাবে এড়াতে পারি? শুভেচ্ছা।
ড্যানিয়েল

2
@ ড্যানিয়েল: আপনি এই ডেটটাইমফর্ম্যাট.ফোর্স প্যাটার্ন ("yYYY-MM-dd'T'HH: মিমি: ss.SSS'Z '") এর সাথে টাইমজোনগুলি যুক্ত করতে পারেন ith সাথে লোকাল (লোকাল.রোট) ith ;
হিউক

2
আমি একটি অবৈধ ফর্ম্যাটটি পেয়েছি: "2014-11-04T17: 41: 52.000 + 01: 00" নিম্নলিখিত ফর্ম্যাটারের সাথে "+01: 00" এ নষ্ট হয়ে গেছে: ব্যক্তিগত স্ট্যাটিক চূড়ান্ত তারিখটাইমফর্ম্যাটর DATE_TIME_FORMATTER = তারিখটাইমফর্ম্যাট.ফর্ম প্যাটার্ন ("yyyy-MM- dd'T'HH: mM: ss.SSS'ZZ ' "); DATE_TIME_FORMATTER.parseDateTime ((STRING) customSoftware.get (হেডার [3])) joda সময়ের উপর 2.2
স্টিফেন

2
জেডজেডের চারপাশে একক উদ্ধৃতি সরিয়ে দেওয়ার পরে এটি কাজ করে। আমি ভাবছি যে এই একক উদ্ধৃতিগুলির অর্থ কী ...
স্টিফেন

2
@ স্টাফেনইবার্ট (বা অন্য যে কেউ) একক উদ্ধৃতি বলতে বোঝায় যে কিছু স্ট্রিংয়ের মধ্যে প্রত্যাশিত একটি আক্ষরিক চরিত্র এবং এটিকে নিদর্শনটির অংশ হিসাবে বিবেচনা করা হবে না। উদাহরণস্বরূপ: যদি আপনার তারিখটি কোনও কারণে "2015-08-dd30" হিসাবে আসে তবে আপনি "yyyy-MM-'ddddddddddd" উল্লেখ করবেন, এটি নির্দেশ করে যে প্রথম ডিডিটি আঙুলের মধ্যে প্রত্যাশিত একটি আক্ষরিক অংশ, এবং দ্বিতীয় ডিডি (অ্যাস্টোস্ট্রোফের বাইরে) হল আসল দিন যা পার্স করা দরকার। সুতরাং আপনার আগের ক্ষেত্রে এটি কাজ করে যদি প্রকৃত টাইমজোনটির পরিবর্তে আপনি আপনার আগত ডেটটাইম-স্ট্রিংয়ের শেষে "জেডজেড" রাখতেন।
সাদবুনি

62

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি এটি যুক্ত করতে চেয়েছিলাম, জোডাটাইম ২.০ হিসাবে আপনি ওয়ান-লাইনার দিয়ে এটি করতে পারেন:

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));

3
আমদানি বিভাগে আমার কী রাখা উচিত?
দিমিত্রি

20
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

7
হওয়া উচিত: DateTimeFormat.forPattern ( "DD / MM / YYYY hh: mm: SS") parseDateTime ( "04/02/2011 20:27:05")।
sufinawaz

16

মন্তব্য থেকে আমি একটি উত্তর পছন্দ করেছি এবং টাইমজোন যুক্ত করেছি:

String dateTime = "2015-07-18T13:32:56.971-0400";

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
        .withLocale(Locale.ROOT)
        .withChronology(ISOChronology.getInstanceUTC());

DateTime dt = formatter.parseDateTime(dateTime);

13

আপনার ফর্ম্যাটটি প্রত্যাশিত আইএসও ফর্ম্যাট নয়, আপনার চেষ্টা করা উচিত

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");

5

আপনি যেমন হিসাবে সিম্পলডেটফর্ম্যাট ব্যবহার করতে পারেনDateTimeFormat

Date startDate = null;
Date endDate = null;
try {
    if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
    if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
    e.printStackTrace();
}

3
kirlisakal এই ক্ষেত্রে না, কিন্তু একটি SimpleDateFormat এটা থ্রেড-নিরাপদ নয় হিসেবে একটি ভাগ উদাহরণস্বরূপ তৈরি করবেন না, এটা ডিবাগ করার জন্য একটি দুঃস্বপ্ন যদি আপনি না হয়
dannrob

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

3

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

কাফ বন্ধ, আমার মনে হয় আপনার প্রয়োজন format = DateTimeFormat.forPattern("M/d/y H:m:s")


3

TL; ড

java.time.LocalDateTime.parse( 
    "04/02/2011 20:27:05" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)

java.time

আধুনিক পদ্ধতির মধ্যে জাভা.টাইম ক্লাস ব্যবহার করা হয় যা পূজাযোগ্য জোদা-সময়কে সমর্থন করে প্রকল্পটি সরবরাহ করে।

হিসাবে পার্স LocalDateTimeআপনার ইনপুট হিসাবে টাইম জোনের কোনও সূচকের অভাব বা ইউটিসি থেকে অফসেটের অভাব হিসাবে করুন।

String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

ldt.toString (): 2011-02-04T20: 27: 05

টিপ: যেখানে সম্ভব, এখানে বর্ণিত বিন্যাসের পরিবর্তে তারিখ-সময় মানগুলি পাঠ্যের হিসাবে বিনিময় করার সময় মানক আইএসও 8601 ফর্ম্যাটগুলি ব্যবহার করুন। সুবিধাজনকভাবে, জাভা.টাইম ক্লাস স্ট্রিংগুলি পার্সিং / উত্পন্ন করার সময় মানক ফর্ম্যাটগুলি ব্যবহার করে।


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

Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই শ্রেণীর বিরক্তিজনক পুরাতন স্থানচ্যুত উত্তরাধিকার যেমন তারিখ-সময় শ্রেণীর java.util.Date,Calendar , &SimpleDateFormat

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

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

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

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


2

একটি সহজ পদ্ধতি:

public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
    DateTime dateRetour;
    dateRetour = session.createDateTime(dateParam);                 

    return dateRetour;
}

0

আছে দুটি উপায়ে এই যেতে পারে অর্জন

DateTimeFormat

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

SimpleDateFormat

        String dateValue = "04/02/2011 20:27:05";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); //  04/02/2011 20:27:05

        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011

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