জাভা: ইউনিক্স টাইমস্ট্যাম্পের তারিখ


237

আমার একটি ইউনিক্স টাইমস্ট্যাম্পকে একটি ডেট অবজেক্টে রূপান্তর করা দরকার।
আমি এটি চেষ্টা করেছি:

java.util.Date time = new java.util.Date(timeStamp);

টাইমস্ট্যাম্প মান: 1280512800

তারিখটি "2010/07/30 - 22:30:00" হওয়া উচিত (যেমনটি আমি পিএইচপি দ্বারা পেয়েছি) তবে পরিবর্তে আমি পেয়েছি Thu Jan 15 23:11:56 IRST 1970

এটি কিভাবে করা উচিত?


3
আপনি যদি জাভা 8 বা তার থেকেও বেশি ব্যবহার করেন
মিচা

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

উত্তর:


429

জন্য 1280512800, 1000 দ্বারা গুণ করুন, যেহেতু জাভা মিলিসেকেন্ডের প্রত্যাশা করছে:

java.util.Date time=new java.util.Date((long)timeStamp*1000);

আপনার যদি ইতিমধ্যে মিলিসেকেন্ড থাকে, তবে ঠিক new java.util.Date((long)timeStamp);

ডকুমেন্টেশন থেকে :

একটি তারিখ অবজেক্ট বরাদ্দ করে এবং স্ট্যান্ডার্ড বেস টাইম থেকে "যুগ" হিসাবে পরিচিত 1 মিলি সেকেন্ডের নির্দিষ্ট সংখ্যার প্রতিনিধিত্ব করতে এটি সূচনা করে, যথা 1 জানুয়ারী, 1970, 00:00:00 জিএমটি।


40
Theালাইটি (long)অত্যন্ত গুরুত্বপূর্ণ: এটি ছাড়া পূর্ণসংখ্যা উপচে পড়ে যায়।
মনারি

2
@ টমাসক java.util.Dateক্লাসের সম্পূর্ণরূপে যোগ্য নাম। Dateআপনি সম্ভবত আপনার ক্লাসে প্যাকেজটি আমদানি করতে পারেন ঠিক একই জিনিসjava.util
পাবলো সান্তা ক্রুজ

5
দীর্ঘ Theালাই প্রয়োজন হয় না। সময় = নতুন java.util. তারিখ (টাইমস্ট্যাম্প * 1000L) ঠিক পাশাপাশি কাজ করে (যেহেতু 1000L একটি দীর্ঘ, টাইমস্ট্যাম্পটি গুণণের অনেক আগেই আপসেক্ট হবে)
টনি বেনব্রাহিম

2
আমি ব্যক্তিগতভাবে করতাম:Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
রায়ান অমরাল

3
এফওয়াইআই, জাভা.টাইম ক্লাসগুলির দ্বারা দমনকৃত পুরানো ডেট-টাইম ক্লাসগুলি যেমন java.util.Dateএখন লিগ্যাসিওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
বেসিল Bourque

59

java.time

জাভা 8 তারিখ এবং সময়গুলির সাথে কাজ করার জন্য একটি নতুন এপিআই প্রবর্তন করেছে: জাভা.টাইম প্যাকেজ

জাভা.টাইমের সাহায্যে আপনি 1970 এর প্রথম মুহুর্তের ইউটিসি, 1970-01-01T00: 00Z-এর প্রথম যুগের রেফারেন্স থেকে আপনার পুরো সেকেন্ডের গণনা পার্স করতে পারেন। ফলাফল একটি Instant

Instant instant = Instant.ofEpochSecond( timeStamp );

আপনার যদি java.util.Dateপুরানো কোডটির সাথে ইন্টারঅ্যাপেটের প্রয়োজন হয় তবে জাভা.টাইমের জন্য এখনও আপডেট হয়নি । পুরানো ক্লাসে যুক্ত নতুন রূপান্তর পদ্ধতিগুলি কল করুন।

Date date = Date.from( instant );

3
যদিও এই উত্তরটি প্রযুক্তিগতভাবে সঠিক, তবে মনে রাখবেন যে জাভা.টাইম ক্লাসগুলি ঝামেলা পুরাতন তারিখের সময় ক্লাসগুলিকে সরবরাহ করে java.util.Date। পুরানো শ্রেণিগুলি উত্তরাধিকারসূত্রে হয় এবং এড়ানো উচিত। আপনি যদি লিগ্যাসি এবং জাভা.টাইম ক্লাসগুলিতে প্রকৃতপক্ষে / রূপান্তর করতে পারেন তবে জাভা.টাইম সাথে যখনই সম্ভব স্থির থাকা ভাল।
বাসিল বাউরক


27

দেখে মনে হচ্ছে ক্যালেন্ডারে যাওয়ার নতুন উপায়:

Calendar mydate = Calendar.getInstance();
mydate.setTimeInMillis(timestamp*1000);
out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));

শেষ লাইনটি কীভাবে এটি ব্যবহার করবেন তার একটি উদাহরণ, এটি প্রিন্ট করবে যেমন "14.06.2012"।

আপনি যদি টাইমস্ট্যাম্প সংরক্ষণ করার জন্য সিস্টেম.কন্ট্রেনটাইমমিলিস () ব্যবহার করেন তবে আপনার "* 1000" অংশের প্রয়োজন হবে না।

আপনার যদি স্ট্রিংয়ের টাইমস্ট্যাম্প থাকে তবে আপনাকে প্রথমে এটি দীর্ঘ হিসাবে পার্স করতে হবে: লং. পার্সলং (টাইমস্ট্যাম্প)।

https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html


8
সতর্কতা: যদি timestampকোনও পূর্ণসংখ্যা হয় তবে আপনাকে (long)প্রথমে এটি castালাই করা উচিত , অন্যথায় আপনি ভুল তারিখগুলি সহ শেষ করবেন। mydate.setTimeInMillis((long) timestamp*1000);
সোভেনকাপুডিয়ার

আমি লিঙ্কটি ঠিক করেছি।
রিকিট

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

26

TL; ড

Instant.ofEpochSecond( 1_280_512_800L )

2010-07-30T18: 00: 00Z

java.time

নতুন জাভা.টাইম ফ্রেমওয়ার্কটি জাভা 8-র মধ্যে নির্মিত এবং পরে জোদা-টাইমের উত্তরসূরি।

এই নতুন ক্লাসগুলিতে যুগ থেকে পুরো সেকেন্ডের একটি কাউন্ট রূপান্তর করতে একটি হ্যান্ডি কারখানা পদ্ধতি অন্তর্ভুক্ত । আপনি Instantন্যানোসেকেন্ডস রেজোলিউশন সহ ইউটিসিতে টাইমলাইনে একটি মুহুর্ত পান।

Instant instant = Instant.ofEpochSecond( 1_280_512_800L );

তাত্ক্ষণিক.আর স্ট্রিং (): 2010-07-30T18: 00: 00Z

আইডিয়নে ডটকমে সরাসরি কোডটি চালানো দেখুন ।

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

Asia/Kabulবা Asia/Tehranসময় অঞ্চল?

আপনি এখানে প্রদর্শিত 18:00 এর পরিবর্তে 22:30 এর একটি টাইম-অফ-ডে মান পেয়েছেন। আমি সন্দেহ করি যে আপনার পিএইচপি ইউটিলিটি ইউটিসি থেকে সামঞ্জস্য করার জন্য স্পষ্টভাবে একটি ডিফল্ট সময় অঞ্চল প্রয়োগ করছে। আমার মানটি এখানে ইউটিসি, দ্বারা স্বাক্ষরিত Z(এর জন্য সংক্ষিপ্ত Zulu, অর্থ ইউটিসি)। আপনার মেশিন ওএস বা পিএইচপি কোন সময় Asia/Kabulবা Asia/Tehranসময় অঞ্চল সেট করা আছে ? আমি মনে করি IRSTআপনি আপনার আউটপুটটিতে প্রতিবেদন করার সময় যা স্পষ্টতই ইরানের সময়কে বোঝায়। বর্তমানে 2017 সালে গ্রীষ্মের সময়গুলি এমন একমাত্র অঞ্চল যা ইউটিসির চেয়ে সাড়ে চার ঘন্টা এগিয়ে।

একটি নির্দিষ্ট করুন সঠিক সময় অঞ্চল নাম এর বিন্যাসে continent/regionযেমন America/Montreal, Africa/Casablancaঅথবা Pacific/Auckland। 3-4 চিঠি সংক্ষেপ ব্যবহার না যেমন ESTবা ISTবা IRSTতারা যেমন না সত্য সময় অঞ্চল, না মান, এবং এমনকি অনন্য নয় (!)।

যদি আপনি কোনও নির্দিষ্ট অঞ্চলের টাইম জোনের লেন্সগুলির মাধ্যমে আপনার মুহূর্তটি দেখতে চান তবে একটি ZoneIdপেতে একটি প্রয়োগ করুন ZonedDateTime। এখনও একই সময় একই মুহূর্ত, কিন্তু একটি পৃথক প্রাচীর-ঘড়ির সময় হিসাবে দেখা ।

ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z );  // Same moment, same point on timeline, but seen as different wall-clock time.

2010-07-30T22: 30 +04: 30 [এশিয়া / তেহরান]

জাভা.টাইম থেকে উত্তরাধিকার শ্রেণিতে রূপান্তর করা

আপনার নতুন জাভা.টাইম ক্লাসের সাথে থাকা উচিত। তবে প্রয়োজনে আপনি পুরানো রূপান্তর করতে পারেন।

java.util.Date date = java.util.Date.from( instant );

Joda-টাইম

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

এফওয়াইআই, জোডা-টাইম ডেটটাইমটির নির্মাতা অনুরূপ: এক হাজার দ্বারা গুণমান long( একটি নয় int!) তৈরি করুন।

DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );

কুখ্যাত ঝামেলা java.util. তারিখ এবং .ক্যালেন্ডার ক্লাস এড়াতে সেরা। তবে আপনার যদি অবশ্যই একটি তারিখ ব্যবহার করা হয় তবে আপনি জোদা-সময় থেকে রূপান্তর করতে পারেন।

java.util.Date date = dateTime.toDate();

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

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

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

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

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

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

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


11

তারিখের নির্মাতা টাইমস্ট্যাম্পের মানটি মিলি সেকেন্ডে প্রত্যাশা করে। আপনার টাইমস্ট্যাম্পের মান 1000 দিয়ে গুণ করুন, তারপরে পাসটি কনস্ট্রাক্টরের কাছে।


7

আপনি যদি অন্য কোনও মেশিনে টাইমস্ট্যাম্প মান রূপান্তর করতে থাকেন তবে আপনাকে সেই মেশিনের টাইমজোনটিও পরীক্ষা করা উচিত। উদাহরণ স্বরূপ;

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

সময় অঞ্চল নির্ধারণ করতে; ইউটিসি-র কাছে ওরফে, আপনি কেবল নতুন করে লিখতে পারেন;

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));

6
আমি এটির ক্ষতিপূরণ দেব না কারণ এটি পুরো জেভিএমের জন্য সময় অঞ্চল নির্ধারণ করে এবং কেবল বিশ্লেষণ প্রক্রিয়া নয়!

1

কোটলিনের জন্য

fun unixToDate(timeStamp: Long) : String? {
    val time = java.util.Date(timeStamp as Long * 1000)
    val sdf = SimpleDateFormat("yyyy-MM-dd")
    return sdf.format(time)

}

0

কখনও কখনও আপনার সামঞ্জস্য নিয়ে কাজ করা দরকার।

Castালাই বেশি দিন ব্যবহার করবেন না! ন্যানোডজাস্টমেন্ট ব্যবহার করুন।

উদাহরণস্বরূপ, ট্রেডিংয়ের জন্য ওয়ান্ডা জাভা এপিআই ব্যবহার করে আপনি ইউনিক্স ফর্ম্যাট হিসাবে ডেটটাইম পেতে পারেন।

উদাহরণস্বরূপ: 1592523410.590566943

    System.out.println("instant with nano = " + Instant.ofEpochSecond(1592523410, 590566943));
    System.out.println("instant = " + Instant.ofEpochSecond(1592523410));

তুমি পাও:

instant with nano = 2020-06-18T23:36:50.590566943Z
instant = 2020-06-18T23:36:50Z

এছাড়াও, ব্যবহার করুন:

 Date date = Date.from( Instant.ofEpochSecond(1592523410, 590566943) );

-4
Date d = new Date(i * 1000 + TimeZone.getDefault().getRawOffset());

3
আরও কিছু পাঠ্য না থাকলে কেন এই উত্তরটি এই প্রশ্নের অন্য অনেকের চেয়ে বেশি পছন্দীয় তা অস্পষ্ট। আপনি দয়া করে পরিষ্কার করতে পারেন?
ডানকান জোন্স

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