জাভা ডেট অবজেক্টে ইউনিক্সের যুগের সময়


85

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

String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
  Date expiry = df.parse(date);
 } catch (ParseException ex) {
  ex.getStackTrace();
}

চিহ্নিত লাইনটি যেখানে আমার সমস্যা হচ্ছে। সিম্পলডিটফর্ম্যাট () -র পক্ষে কী যুক্তি হওয়া উচিত, বা এমনকি সরলডেট ফরমেট () ব্যবহার করার পরেও আমি কাজ করতে পারি না।


জোদা-টাইম লাইব্রেরি ব্যবহার করে উদাহরণ কোড সহ মিলসেকেন্ডের মধ্যে ডেট-টাইমে রূপান্তর করার অনুরূপ প্রশ্নের আমার বিস্তারিত উত্তর দেখুন ।
তুলসী বাউর্কে

private String getDateString(long timeInMilliseconds) { SimpleDateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy 'at' HH:mm:ss z"); return formatter.format(timeInMilliseconds); }
জেভিজেপ্লাস

উত্তর:


129

কীভাবে ঠিক:

Date expiry = new Date(Long.parseLong(date));

সম্পাদনা: rde6173 এর উত্তর অনুসারে এবং প্রশ্নের মধ্যে উল্লিখিত ইনপুটটি ঘনিষ্ঠভাবে পর্যালোচনা করলে, "1081157732" একটি সেকেন্ড-ভিত্তিক যুগের মান বলে মনে হচ্ছে তাই আপনি রূপান্তর করতে পার্সেলং () -এর দ্বারা দীর্ঘটি দীর্ঘ করতে চান 1000 মিলিসেকেন্ডে, যা জাভার ডেট কনস্ট্রাক্টর ব্যবহার করে, তাই:

Date expiry = new Date(Long.parseLong(date) * 1000);

4
এটি লিপ সেকেন্ডগুলিতে বিবেচনায় না নেওয়ায় প্রযুক্তিগতভাবে কী ভুল হবে না?
ম্যাকিয়েজ পাইচোটকা

4
ম্যাকিয়েজ, অপের "সেকেন্ড-ভিত্তিক" যুগটি ইতিমধ্যে লিপ সেকেন্ডগুলির জন্য অ্যাকাউন্ট করে, এটি "সেকেন্ড" -ভিত্তিক। সুতরাং এই উত্তরটি সঠিক।
কার্পি

4
এটি আমাকে ভুল মান দেয় যদি 1000 দ্বারা গুণিত হয় তবে এটি করার আরও ভাল উপায় নেই?
ইশান

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

প্রশ্নটি হ'ল যুগটি, যা ইউটিসি এবং তারিখটি জিএমটি থেকে দীর্ঘকালীন হওয়ার প্রত্যাশা করে, তারা কি একই রকম?
লুক

37

1970 এর 1 জানুয়ারীর পর থেকে যুগটি সেকেন্ডের সংখ্যা ..

সুতরাং:

String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );

আরও তথ্যের জন্য: http://www.epochconverter.com/


4
এটি একটি ট্রিট কাজ করে ... IDK Y এটি উত্তর হিসাবে যাচাই করা হয়নি :)
মাক্কি

এই উত্তরের জন্য আপনাকে ধন্যবাদ। আমি এখানে বসে বসে একটি যুগের আগে তারিখটি ইনস্ট্যান্ট করার চেষ্টা করছিলাম এবং ফলাফলটি সর্বদা 1970 এর কিছুদিন ছিল, এবং কারণ আমি অজান্তে জাভা মিলিসেকেন্ড দিছিলাম, সেকেন্ড নয় :)
লো-ট্যান

24

java.time

java.timeজাভা 8 এবং তার পরে নির্মিত ফ্রেমওয়ার্কটি ব্যবহার করে ।

import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;

long epoch = Long.parseLong("1081157732");
Instant instant = Instant.ofEpochSecond(epoch);
ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]

ZonedDateTimeএক্ষেত্রে আপনার এটি ইউটিসি সময় অঞ্চল হিসাবে তারিখ হিসাবে চিহ্নিত করার জন্য আরও ভাল ব্যবহার করা উচিত কারণ জাভা দ্বারা ব্যবহৃত ইউনিক্স সময়ে ইউপিসি ইউটিসি-তে সংজ্ঞায়িত করা হয়েছিল ।

ZoneOffsetউপরের শেষ লাইনে যেমনটি ইউটিসি সময় অঞ্চলের জন্য একটি ধরণের ধ্রুবক রয়েছে। এর সুপারক্লাসটি ZoneIdঅন্যান্য সময় অঞ্চলগুলিতে সামঞ্জস্য করতে ব্যবহার করা যেতে পারে।

ZoneId zoneId = ZoneId.of( "America/Montreal" );

ভাল উত্তর. আমি বাদ দেওয়ার পরামর্শ দিচ্ছি LocalDateTimeএবং কেবল একটি প্রদর্শন করব ZonedDateTime। বেশিরভাগ ব্যবসায়িক অ্যাপ্লিকেশনগুলিতে, ZonedDateTimeযাওয়ার সর্বোত্তম উপায়। LocalXXXপ্রকারভেদগুলি নিয়ে লোকেরা নিজেকে সমস্যায় / বিভ্রান্তিতে ফেলে ।
তুলসী বার্ক


0

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


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

0

সেকেন্ড টাইম স্ট্যাম্পকে মিলিসেকেন্ড টাইম স্ট্যাম্পে রূপান্তর করতে। আপনি টাইমউনাইট এপিআই ব্যবহার করতে পারেন এবং এর মতো ঝরঝরে।

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)


-1

হুম .... যদি আমার ভুল না হয় তবে ইউনিক্স যুগের সময়টি আসলে একই রকম

System.currentTimeMillis()

তাই লিখছি

try {
    Date expiry = new Date(Long.parseLong(date));
}
catch(NumberFormatException e) {
    // ...
}

কাজ করা উচিত (এবং তারিখটি বিশদকরণের তুলনায় অনেক দ্রুত হওয়া উচিত)


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