জাভাতে বিভিন্ন ফর্ম্যাট সহ তারিখের পার্সিং করুন


93

আমি বিভিন্ন ফর্ম্যাটে রূপান্তর Stringকরতে চাই Date

উদাহরণ স্বরূপ,

আমি ব্যবহারকারীর কাছ থেকে পাচ্ছি,

String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format

আমি এই রূপান্তর করতে চান fromDateএকটি তারিখ অবজেক্ট হিসেবে "yyyy-MM-dd"বিন্যাস

কিভাবে আমি এটি করতে পারব?


4
একটি তারিখ অবজেক্টের কোনও ফর্ম্যাট নেই, এটি কেবলমাত্র সংখ্যাটি উপস্থাপন করে। তারিখটি "yyyy-MM-dd" ফর্ম্যাট সহ একটি স্ট্রিং দ্বারা প্রতিনিধিত্ব করা যেতে পারে।
ব্যবহারকারী 85421

উত্তর:


182

একবার দেখুন SimpleDateFormat। কোডটি এরকম কিছু হয়:

SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

try {

    String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
    e.printStackTrace();
}

4
স্ট্রিং ফর্ম্যাট পাওয়ার পরিবর্তে, আমি Dateফর্ম্যাটে আউটপুট পেতে পারি ?
রাহেল

4
@ রাচেল: অবশ্যই, ব্যবহার করুন parseএবং এগিয়ে যান না formatparseএকটি তারিখকে একটি তারিখ বিশ্লেষণ করে।
মাইকেল ম্যাইইয়ার্স

4
তবে parseআমাকে তারিখের ফর্ম্যাটে date formatযেমন Fri Jan 06 00:01:00 EST 2012প্রয়োজন 2012-01-06
রাচেল

4
@ রাচেল এর কারণ এটি যখন আপনি System.out.println(anyDateObject)ডিফল্টকে স্ট্রিং () পদ্ধতি কল করেন তখন সেই বিন্যাসে মুদ্রণ করতে বলা হয় Fri Jan 06 00:01:00 EST 2012। আপনার প্রয়োজন অনুসারে আপনার এটিকে ওভাররাইড করতে হবে।
কেএনইউ

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

14

tl; ডা

LocalDate.parse( 
    "19/05/2009" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
)

বিশদ

সঙ্গে অন্যান্য উত্তরসমূহ java.util.Date, java.sql.Dateএবং SimpleDateFormatএখন পুরানো করছে।

LocalDate

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

DateTimeFormatter

তারিখ-সময় মানের প্রতিনিধিত্ব করে এমন একটি স্ট্রিং পার্স, বা উত্পন্ন করার জন্য, DateTimeFormatterশ্রেণিটি ব্যবহার করুন ।

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );

কোনও স্ট্রিংয়ের মান উপস্থাপন করে একটি তারিখ-সময় অবজেক্টটি মিশ্রণ করবেন না। একটি তারিখ সময়ে বস্তুর হয়েছে কোন বিন্যাস যখন একটি স্ট্রিং আছে। একটি ডেট-টাইম অবজেক্ট যেমন কোনও স্ট্রিং এর অভ্যন্তরীণ মান উপস্থাপনের জন্য তৈরিLocalDate করতে পারে তবে তারিখের সময় অবজেক্ট এবং স্ট্রিং পৃথক পৃথক পৃথক বস্তু।

স্ট্রিং উত্পন্ন করতে আপনি যে কোনও কাস্টম বিন্যাস নির্দিষ্ট করতে পারেন। অথবা জাভা.টাইমকে স্বয়ংক্রিয়ভাবে স্থানীয়করণের কাজটি করতে দিন।

DateTimeFormatter f = 
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );

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

System.out.println( "ld: " + ld + " | output: " + output );

ld: 2009-05-19 | আউটপুট: মার্চ 19 ম 2009

IdeOne.com এ কর্মে দেখুন


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

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

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

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

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

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

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


12

SimpleDateFormatক্লাসটি ব্যবহার করুন :

private Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = new SimpleDateFormat(format);
    return formatter.parse(date);
}

ব্যবহার:

Date date = parseDate("19/05/2009", "dd/MM/yyyy");

দক্ষতার জন্য, আপনি হ্যাশম্যাপে আপনার ফর্ম্যাটরগুলি সঞ্চয় করতে চান। হ্যাশম্যাপটি আপনার ব্যবহার শ্রেণীর স্থির সদস্য।

private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();

public static Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = hashFormatters.get(format);

    if (formatter == null)
    {
        formatter = new SimpleDateFormat(format);
        hashFormatters.put(format, formatter);
    }

    return formatter.parse(date);
}

9
ক্যাভেট !! ধারণাটি ভাল, তবে বাস্তবায়ন হয় না। তারিখের ফর্ম্যাটগুলি অবশ্যই স্থিতিশীলভাবে সংরক্ষণ করা উচিত নয়, কারণ এগুলি থ্রেড-নিরাপদ নয়! যদি এগুলি একাধিক থ্রেড থেকে ব্যবহৃত হয় (এবং এটি সর্বদা স্ট্যাটিকসের সাথে ঝুঁকিপূর্ণ হয়)। ফাইন্ডবাগুলিতে এর জন্য একটি ডিটেক্টর রয়েছে (যা আমি প্রাথমিকভাবে অবদানের জন্য ঘটলাম , আমাকে কামড়ানোর পরে। dschneller.blogspot.com/2007/04/… :-) দেখুন )
ড্যানিয়েল

আপনার ব্লগ এন্ট্রিটি একটি আকর্ষণীয় পঠনযোগ্য :-) যদি পার্সডেট-পদ্ধতি নিজেই আমি সিঙ্ক্রোনাইজ হয় তবে কী হবে? যদিও সমস্যাটি হ'ল এটি সম্ভবত কোডটি ধীর করবে ...
আগোরা

4
পার্সডেট পদ্ধতিটি ম্যাপে অ্যাক্সেস করার একমাত্র পদ্ধতি ছিল যতক্ষণ না এটি সিঙ্ক্রোনাইজ করা কাজ করবে। তবে এটি হবে - যেমন আপনি বলেছেন - একটি বাধা পরিচয় করিয়ে দিন।
ড্যানিয়েল শানলার 13

8

স্ট্রিংয়ের তারিখটিকে java.sql.Date এ রূপান্তর করুন

String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dtt = df.parse(fromDate);
java.sql.Date ds = new java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010


3

যদিও SimpleDateFormatসত্যই আপনার প্রয়োজনগুলির জন্য কাজ করবে, অতিরিক্ত আপনি জোদা সময় যাচাই করতে চাইতে পারেন , যা সম্ভবত জাভা 7. এর পুনর্বারের তারিখ লাইব্রেরির ভিত্তি While এটি সম্পর্কে এবং যদি আপনার প্রকল্পগুলিতে আপনার ম্যানিপুলেটিংয়ের তারিখগুলি বিস্তৃতভাবে হয় তবে এটি সম্ভবত সন্ধানের পক্ষে উপযুক্ত।


2

মনে করুন যে আপনার মতো স্ট্রিং রয়েছে:

String mDate="2019-09-17T10:56:07.827088"

এখন আমরা জাভা এবং কোটলিনে এই Stringফর্ম্যাটটি পৃথক তারিখ এবং সময় পরিবর্তন করতে চাই ।

জাভা:

নিষ্কাশন তারিখের জন্য আমাদের একটি পদ্ধতি রয়েছে :

public String getDate() {
    try {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
        Date date = dateFormat.parse(mDate);
        dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
        return dateFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return null;
}

Return এটি: 09/17/2019

এবং আমাদের নিষ্কাশন সময় জন্য পদ্ধতি আছে :

public String getTime() {

    try {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
        Date date = dateFormat.parse(mCreatedAt);
        dateFormat = new SimpleDateFormat("h:mm a", Locale.US);
        return dateFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return null;
}

Returnএটি: 10:56 এএম

কটলিন:

এক্সট্রাক্ট তারিখের জন্য আমাদের একটি ফাংশন রয়েছে :

fun getDate(): String? {

    var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
    val date = dateFormat.parse(mDate!!)
    dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US)
    return dateFormat.format(date!!)
}

Return এটি: 09/17/2019

এবং আমাদের নিষ্কাশন সময় জন্য পদ্ধতি আছে :

fun getTime(): String {

    var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
    val time = dateFormat.parse(mDate!!)
    dateFormat = SimpleDateFormat("h:mm a", Locale.US)
    return dateFormat.format(time!!)
}

Returnএটি: 10:56 এএম


দয়া করে অল্পবয়সিদের দীর্ঘকালীন এবং কুখ্যাত সমস্যাযুক্ত SimpleDateFormatক্লাসটি ব্যবহার করতে শিখবেন না । কমপক্ষে প্রথম বিকল্প হিসাবে না। এবং কোনও সংরক্ষণ ছাড়া না। java.timeআধুনিক জাভা তারিখ এবং সময় এপিআই, এবং এর মধ্যে আজ আমরা আরও অনেক ভাল DateTimeFormatter। এছাড়াও SimpleDateFormatসেকেন্ডে 6 মিম্বল (মাইক্রোসেকেন্ডস) সঠিকভাবে পার্স করতে পারে না।
ওলে ভিভি

আমি যখন আপনার দ্বিতীয় স্নিপেটটি চালাচ্ছি, 10:56 AMআপনি যা বলবেন সেভাবে আমি পাই না , তবে পরিবর্তে 11:09 AM(ওরাকল জেডকে-১১.০.৩ এ পরীক্ষিত)।
ওলে ভিভি

@ ওলেভ.ভি. , যদি কোনও পদ্ধতি দীর্ঘকালীন হয়ে যায়, তবে এটির জন্য একটি লাইনটি চিহ্ন হিসাবে এটি অবহেলা করা হবে, যদি কোনও পদ্ধতি বা শ্রেণি অবহেলিত না হয় তবে আমরা এটি ব্যবহার করতে পারি, আমি বলতে চাই না এটি সেরা উপায়, সম্ভবত আমাদের আরও ভাল উপায় আছে তবে এই উপায় সহজ এবং বোধগম্য, যদি কোনও পদ্ধতি বা শ্রেণি পুরানো হয় তবে DateTimeFormatterminsdk 26
সমস্যাটি

@ ওলেভ.ভি. তবে আপনার মন্তব্যের জন্য এবং আপনার দ্বিতীয় মন্তব্যের জন্য ধন্যবাদ আমি বলতে পারি যে আমি এটি দুটি আবেদনকারীর মধ্যে অনেকবার যাচাই করেছিলাম এবং এটি ফিরে আসে10:56 AM
মিলাদ সালিমি

4
@ ওলেভ.ভি. , ঠিক আছে তবে আমি কোনও লাইব্রেরি ব্যবহার করি যখন আমার কোনও উপায় নেই বা এপিআই (লাইব্রেরি) আমার কোডের তুলনায় খুব ভাল হবে কারণ আপনি যখন কোনও লাইব্রেরি যুক্ত করেন তখন আপনি আপনার প্রকল্পে এমন কিছু কোড যুক্ত করেন যা ব্যবহার নাও হতে পারে এবং এটি আপনার জন্য ওভারলোড হয় প্রকল্প, এটি আমার পদ্ধতির এবং আপনার পদ্ধতির আমার জন্য সম্মানজনক।
মিলাদ সালিমি

1

একটি তারিখ ফর্ম্যাট করার এবং স্ট্রিংয়ে রূপান্তর করার সহজ উপায়

    Date date= new Date();

    String dateStr=String.format("%td/%tm/%tY", date,date,date);

    System.out.println("Date with format of dd/mm/dd: "+dateStr);

আউটপুট: dd / মিমি / ডিডি ফর্ম্যাট সহ তারিখ: 21/10/2015


1

কোনও Dateবস্তুর কোনও বিন্যাস নেই , এটি একটি উপস্থাপনা। আপনার পছন্দ মতো ফর্ম্যাটString সহ তারিখটি উপস্থাপন করা যেতে পারে ।

যেমন " yyyy-MM-dd", " yy-MMM-dd", " dd-MMM-yy" এবং ইত্যাদি

এটির জন্য আপনি ব্যবহারটি পেতে পারেন SimpleDateFormat

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

        String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format

        SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); 
        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
            String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
            System.out.println(dateMyFormat); // outputs : 2009-05-19

        } catch (ParseException e) {
            e.printStackTrace();
        }

এই ফলাফল: 2009-05-19

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