স্ট্রিংটিকে জাভায় ক্যালেন্ডার অবজেক্টে রূপান্তর করুন


174

আমি জাভাতে নতুন, সাধারণত পিএইচপি দিয়ে কাজ করি।

আমি এই স্ট্রিং রূপান্তর করার চেষ্টা করছি:

সোমবার 14 মার্চ 16:02:37 GMT ২০১১

কোনও ক্যালেন্ডার অবজেক্টের মধ্যে যাতে আমি সহজেই বছর এবং মাসটিকে এভাবে টানতে পারি:

String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);

এটি ম্যানুয়ালি পার্স করা খারাপ ধারণা হবে? সাবস্ট্রিং পদ্ধতি ব্যবহার করছেন?

কোন পরামর্শ ধন্যবাদ সাহায্য করবে!


উত্তর:


396
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done

দ্রষ্টব্য: Localeআপনার পরিবেশ / প্রয়োজন অনুসারে সেট করুন


আরো দেখুন


onlineconversion.com/unix_time.htm । এটি অনলাইন টাইমস্ট্যাম্প রূপান্তরকারী। জাভা কোড দ্বারা গণনা করা হয় এবং এই অনলাইন রূপান্তরটি পৃথক হয়ে যায়। কেন ?? আপনি কি এই মাধ্যমে যেতে পারেন? ধন্যবাদ :)
শচীন জে

6
নোট করুন যে এটি টাইমজোন তথ্যকে হারিয়ে ফেলে। ক্যালেন্ডার অবজেক্টটিতে সিস্টেম ডিফল্ট টাইমজোন থাকবে পার্সড নয়।
ক্রিশ্চিয়ান ভ্রাবী

এটি আর শীর্ষ / স্বীকৃত উত্তর হওয়া উচিত নয়। যেহেতু জাভা 8 ইতিমধ্যে 4 বছরেরও বেশি সময় ধরে বাইরে রয়েছে উল্লেখ করার জন্য উত্তরটি আপডেট করা উচিত java.time। এই প্রশ্নোত্তরটি গুগলে বেশ বিশিষ্ট হয়।
স্কোলিটাস

18

TL; ড

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

YearMonth.from(
    ZonedDateTime.parse( 
        "Mon Mar 14 16:02:37 GMT 2011" , 
        DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
     )
).toString()

2011-03

উত্তরাধিকারের তারিখ-সময় ক্লাসগুলি এড়িয়ে চলুন

আধুনিক উপায় জাভা.টাইম ক্লাস সহ। পুরানো তারিখ-কালীন ক্লাসগুলি যেমন Calendarখারাপভাবে নকশাকৃত, বিভ্রান্তিকর এবং সমস্যাযুক্ত বলে প্রমাণিত হয়েছে।

আপনার স্ট্রিং ইনপুট মেলে একটি কাস্টম বিন্যাস সংজ্ঞায়িত করুন।

String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );

হিসেবে বিশ্লেষণ ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.parse( input , f );

আপনি বছর এবং মাস আগ্রহী। জাভা.টাইম ক্লাসগুলি YearMonthসেই উদ্দেশ্যে ক্লাস অন্তর্ভুক্ত করে ।

YearMonth ym = YearMonth.from( zdt );

প্রয়োজনে আপনি বছর এবং মাসের নম্বরগুলির জন্য জিজ্ঞাসাবাদ করতে পারেন।

int year = ym.getYear();
int month = ym.getMonthValue();

তবে toStringপদ্ধতিটি স্ট্যান্ডার্ড আইএসও 8601 ফর্ম্যাটে একটি স্ট্রিং উত্পন্ন করে।

String output = ym.toString();

এই সব একসাথে রাখুন।

String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();

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

System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );

ইনপুট: সোমবার 14 16:02:37 GMT ২০১১

zdt: 2011-03-14T16: 02: 37Z [GMT]

ym: 2011-03

লাইভ কোড

IdeOne.com এ চলমান এই কোডটি দেখুন ।

রূপান্তর

আপনার যদি অবশ্যই কোনও Calendarঅবজেক্ট থাকে তবে আপনি GregorianCalendarপুরানো ক্লাসগুলিতে যুক্ত নতুন পদ্ধতিতে রূপান্তর করতে পারেন ।

GregorianCalendar gc = GregorianCalendar.from( zdt );

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

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

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

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

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

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


14

ঠিক আছে, আমি মনে করি যে কোডটি ইতিমধ্যে উপস্থিত ক্লাসে উপস্থিত রয়েছে প্রতিলিপি করা খারাপ ধারণা হবে SimpleDateFormat

অন্যদিকে, ব্যক্তিগতভাবে আমি এড়াতে Calendarএবং Dateপুরোপুরি যদি আপনি পারেন তবে এবং এর পরিবর্তে জোদা টাইমকে আরও উন্নততর নকশা করা তারিখ এবং সময় এপিআই হিসাবে ব্যবহার করার পরামর্শ দেব । উদাহরণস্বরূপ, যদি আপনি জেনে রাখুন যে হতে হবে SimpleDateFormatহয় না , থ্রেড-নিরাপদ তাই আপনি পারেন প্রয়োজন থ্রেড-স্থানীয়দের, সিঙ্ক্রোনাইজেশন, অথবা একটি নতুন দৃষ্টান্ত প্রতিটি সময় আপনি এটি ব্যবহার। Joda পারজার এবং formatters হয় থ্রেড-নিরাপদ।


আপনার ইনপুটটির জন্য ধন্যবাদ, আমি অবশ্যই ভবিষ্যতে জোদা ব্যবহার করে দেখব, দেখে মনে হচ্ছে এটি খুব কার্যকর হতে পারে
ডগ মলিনাক্স

@ জোন স্কিট জোদা অ্যান্ড্রয়েডে ডিসিজারাইজ করবে না। জোদা যদি আপনার তারিখ এবং সময় সংরক্ষণ করার প্রয়োজন না হয় তবে মূল্যবান।
ফ্রাঙ্ক জাম্পা

@ ফ্র্যাঙ্কজাপ্পা: আমি এর সাথে একমত নই - আপনি জোডা সময়গুলিতে আপনার সমস্ত তারিখ / সময় গণনা করতে পারেন , তবে সিরিয়ালকরণের উদ্দেশ্যে অন্য ধরণের (সম্ভবত সরলতার জন্য কেবল স্ট্রিং) রূপান্তর করতে পারেন।
জন স্কিটি

দুঃখিত, ডাউনওয়েট করতে হয়েছিল, উত্তরটি খুব পুরানো, এটি সর্বোচ্চ র‌্যাঙ্কিংয়ের উত্তর হিসাবে পুরানো out আজ java.timeযাওয়ার উপায়, বাসিল বাউর্ক একটি দুর্দান্ত উত্তর সরবরাহ করেছে।
স্কোলিটাস

2
@ স্কলিটাস: শীর্ষের (এবং স্বীকৃত) উত্তরের এই একটির সাথে 10 টির তুলনায় 332 ভোট রয়েছে। আমার মনে হয় আপনি যদি প্রতি 7+-বছরের পুরানো উত্তরটির আরও ভাল সমাধান পেতে পারেন তবে আপনি নিম্নাঞ্চলের বাইরে চলে যাবেন ... (আমি একমত যে, বাসিলের উত্তর ভাল, এবং আমি এটি অগ্রাহ্য করেছি।)
জন স্কেটি

10

কোনও নতুন ক্যালেন্ডার তৈরি করার দরকার নেই, সিম্পলডিটফর্ম্যাট ইতিমধ্যে নীচে একটি ক্যালেন্ডার ব্যবহার করে।

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US);
Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
Calendar cal = sdf.getCalendar();

(আমি এখনও মন্তব্য করতে পারি না, এ কারণেই আমি একটি নতুন উত্তর তৈরি করেছি)


1
আপনার সমাধানটি মার্জিত দেখায়, তবে এর দুটি অসুবিধা রয়েছে: ১. জাভাডক আশানুরূপ আচরণের গ্যারান্টি দেয় না। 2. জাভা 6 এর জন্য কমপক্ষে 1353 লাইনে আপনি একটি পথ খুঁজে পাবেন যেখানে ক্যালেন্ডার-অবজেক্টটি ক্লোন করা আছে। তারপরে তখন! তারিখ.সকাল (Cal.getTime ())।
নিলস

5

SimpleDateFormatদুর্দান্ত, কেবলমাত্র নোট করুন যে ঘন্টা সহ কাজ করার সময় HHথেকে আলাদা hhHH24 ঘন্টা ভিত্তিক ঘন্টা এবং hh 12 ঘন্টা ভিত্তিক ঘন্টা ফিরে আসবে।

উদাহরণস্বরূপ, নিম্নলিখিতগুলি 12 ঘন্টা সময় আসবে:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");

যদিও এটি 24 ঘন্টা সময় আসবে:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");

4

টাইমজোন দিয়ে একটি সময় পার্স করুন, Zনকশায় সময় অঞ্চলের জন্য

String aTime = "2017-10-25T11:39:00+09:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
    Calendar cal = Calendar.getInstance();
    cal.setTime(sdf.parse(aTime));
    Log.i(TAG, "time = " + cal.getTimeInMillis()); 
} catch (ParseException e) {
    e.printStackTrace();
}

আউটপুট: এটি ইউটিসি সময় ফিরিয়ে দেবে

1508899140000

এখানে চিত্র বর্ণনা লিখুন

আমরা মত প্যাটার্ন সময় অঞ্চল সেট না করেন yyyy-MM-dd'T'HH:mm:ssSimpleDateFormatসেট করা টাইম অঞ্চলটি ব্যবহার করবেSetting


3

হ্যাঁ এটি নিজের বিশ্লেষণ করা খারাপ অভ্যাস হবে। কটাক্ষপাত SimpleDateFormat , এটা একটি তারিখে স্ট্রিং চালু হবে এবং আপনি একটি ক্যালেন্ডার উদাহরণস্বরূপ মধ্যে তারিখ সেট করতে পারেন।


1

সহজ পদ্ধতি:

public Calendar stringToCalendar(String date, String pattern) throws ParseException {
    String DEFAULT_LOCALE_NAME = "pt";
    String DEFAULT_COUNTRY = "BR";
    Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY);
    SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE);
    Date d = format.parse(date);
    Calendar c = getCalendar();
    c.setTime(d);
    return c;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.