জাভায় স্ট্রিম্যাট টাইমকে মিলিসেকেন্ডে টাইমস্ট্যাম্প রূপান্তর করুন


126

আমি একটি দীর্ঘ মান ( ১/১/১৯70০ অর্থাত্ ইপোচ থেকে বিচ্ছিন্ন মিলিসেকেন্ডগুলির সংখ্যা ) ফর্ম্যাটের সময় রূপান্তর করার চেষ্টা করছি h:m:s:ms

আমি টাইমস্ট্যাম্প হিসাবে লম্বা মানটি ব্যবহার করি, আমি timestampলগ 4j থেকে একটি লগিং ইভেন্টের ক্ষেত্র থেকে পাই।

এখনও অবধি আমি নিম্নলিখিতটি চেষ্টা করেছি এবং এটি ব্যর্থ হয়েছে:

logEvent.timeStamp/ (1000*60*60)
TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)

তবে আমি ভুল মান পেয়েছি:

1289375173771 for logEvent.timeStamp
358159  for logEvent.timeStamp/ (1000*60*60) 
21489586 for TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)

কিভাবে আমি এই সম্পর্কে যান?

উত্তর:


188

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

Date date = new Date(logEvent.timeSTamp);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateFormatted = formatter.format(date);

দেখুন SimpleDateFormat অন্যান্য বিন্যাস স্ট্রিং একটি বিবরণ যে বর্গ গ্রহণ জন্য।

1200 এমএস এর ইনপুট ব্যবহার করে রানযোগ্য উদাহরণ দেখুন ।


8
মন্তব্য: এইচএইচ that তারিখের সময়টি (0-23) মুদ্রণ করবে, ১৯ 1970০ সাল থেকে মোট সময় ব্যয় হয়েছে। শুধু বলুন '।
জনিটেক্স

4
এবং ভুলবেন না। ওল্ড সিম্পলডেট ফরম্যাটটি বহুবিধ ব্যবহার করা যাবে না।
কেইকি

আমদানি SimpleDateFormatকরতে, আমদানিটি নিম্নরূপ হিসাবে ব্যবহার করুন:import java.text.*;
নবীন কুমার আরবি

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

1
লজভেন্টের ধরণ কী? আপনি দয়া করে প্রশ্নটিতে রাখতে পারেন?
রাউল্প

127
long millis = durationInMillis % 1000;
long second = (durationInMillis / 1000) % 60;
long minute = (durationInMillis / (1000 * 60)) % 60;
long hour = (durationInMillis / (1000 * 60 * 60)) % 24;

String time = String.format("%02d:%02d:%02d.%d", hour, minute, second, millis);

13
আমি আপনার সমাধানটি গ্রহণযোগ্য উত্তরের চেয়ে ভাল পছন্দ করি কারণ এটি কিছুটা আরও স্পষ্ট এবং স্থানীয় লোকেশনে সমস্যা না ভোগ করে। যদিও আপনি চূড়ান্ত অংশটি মিস করেছেন: মিলিস = মিলিস% 1000, যা ফর্ম্যাট স্ট্রিংয়ের শেষে মিলি সেকেন্ড যথাযথভাবে স্থাপন করবে।
ওন্দ্রেজ বুর্ক্ট

7
@ ওয়েসলিডিকিরসমেকার, সাধারণভাবে, পাঠযোগ্যতা সংক্ষিপ্ততার চেয়ে গুরুত্বপূর্ণ।
আলফায়া

2
24 ঘন্টা কেন ঘন্টা বাকি?
বাবু

2
বিভাগটি সহকারী নয়: 50000 / (1000 * 60) = 0.8333333333 যখন 50000/1000 * 60 =
3000.

3
'মিলিস = মিলিস% 1000' অনুপস্থিত: D \ n এবং আপনার যদি দিনের প্রয়োজন হয় তবে এখানে যান: 'দীর্ঘ দিন = (মিলিস / (1000 * 60 * 60 * 24));'
অ্যাড্রিমাস

38

আমি আপনাকে তিনটি উপায় দেখাব (ক) দীর্ঘ মান থেকে মিনিটের ক্ষেত্রটি পেতে, এবং (খ) আপনি চান তারিখের বিন্যাসটি ব্যবহার করে এটি মুদ্রণ করুন। একটি ব্যবহার java.util.Calendar আরেক ব্যবহারসমূহ Joda-টাইম , এবং শেষ ব্যবহারসমূহ java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা।

জাভা.টাইম ফ্রেমওয়ার্ক পুরাতন বান্ডিল করা তারিখ-সময় ক্লাসগুলিকে পরিপূরক করে এবং জোদা-টাইম দ্বারা অনুপ্রাণিত হয়, জেএসআর 310 দ্বারা সংজ্ঞায়িত হয়েছে এবং থ্রিটেন-অতিরিক্ত প্রকল্প দ্বারা বর্ধিত হয়েছে।

জাভা.টাইম ফ্রেমওয়ার্কটি জাভা 8 এবং তারপরে ব্যবহার করার সময় যাওয়ার উপায়। অন্যথায় অ্যান্ড্রয়েডের মতো জোদা-সময় ব্যবহার করুন। Java.util.Date/.C ক্যালেন্ডার ক্লাসগুলি কুখ্যাত সমস্যা এবং এড়ানো উচিত।

java.util. তারিখ এবং .ক্যালেন্ডার

final long timestamp = new Date().getTime();

// with java.util.Date/Calendar api
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
// here's how to get the minutes
final int minutes = cal.get(Calendar.MINUTE);
// and here's how to get the String representation
final String timeString =
    new SimpleDateFormat("HH:mm:ss:SSS").format(cal.getTime());
System.out.println(minutes);
System.out.println(timeString);

Joda-টাইম

// with JodaTime 2.4
final DateTime dt = new DateTime(timestamp);
// here's how to get the minutes
final int minutes2 = dt.getMinuteOfHour();
// and here's how to get the String representation
final String timeString2 = dt.toString("HH:mm:ss:SSS");
System.out.println(minutes2);
System.out.println(timeString2);

আউটপুট:

24
09: 24: 10: 254
24
09: 24: 10: 254

java.time

long millisecondsSinceEpoch = 1289375173771L;
Instant instant = Instant.ofEpochMilli ( millisecondsSinceEpoch );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , ZoneOffset.UTC );

DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "HH:mm:ss:SSS" );
String output = formatter.format ( zdt );

System.out.println ( "millisecondsSinceEpoch: " + millisecondsSinceEpoch + " instant: " + instant + " output: " + output );

মিলিসেকেন্ডসিন্সপোচ: 1289375173771 তাত্ক্ষণিক: 2010-11-10T07: 46: 13.771Z আউটপুট: 07: 46: 13: 771


1
পারফরম্যান্সের কোনও কারণ বা অন্য কোনও কারণ আছে, আমার ক্যালেন্ডারে জোদা উপস্থাপন করা উচিত?
ক্র্যাটিলাস

1
এই মত সহজ ক্ষেত্রে, না। সাধারণভাবে: জোড়ার এপিআই আরও ভাল ডিজাইন করা হয়েছে। যেমন জাভা তারিখগুলি পরিবর্তনীয় জোদা ডেটটাইমস হয় না। জোদা আরও প্রোগ্রামার বান্ধব, আপনি ডেটটাইম ক্লাস থেকে প্রায় সমস্ত কার্যকারিতা অ্যাক্সেস করতে পারবেন তারিখ এবং ক্যালেন্ডারের মধ্যে এবং পিছনে রূপান্তর না করে
সান প্যাট্রিক ফ্লয়েড

আমার কি সচেতন হওয়া উচিত তার কোনও নির্ভরতা রয়েছে?
ক্র্যাটিলাস

2
ভাল উত্তর, তবে আমি জেভিএমের বর্তমান ডিফল্ট টাইম জোনের উপর অন্তর্নিহিত নির্ভর না করে সময় অঞ্চল নির্দিষ্ট করার পরামর্শ দিচ্ছি। তাই ডেটটাইম এর কনস্ট্রাক্টরের কাছে কলটির একটি দ্বিতীয় যুক্তি, একটি DateTimeZoneঅবজেক্ট থাকবে। new DateTime( timestamp, DateTimeZone.forID( "America/Montreal" ) )
এটির

2
@ ক্র্যাটিলাস জাভা.টাইম ক্লাসগুলি জাডা -টাইম এবং পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাস উভয় জাভাতে বান্ডিল করেছে। জোদা-টাইম একই মানুষ স্টিফেন কলবর্নের নেতৃত্বে দুটি প্রকল্পই জাভা.টাইম ক্লাসগুলিকে অনুপ্রাণিত করেছিল our
তুলিল বাউর্কে

22

অ্যাপাচি কমন্স (কমন্স-ল্যাঙ্গ 3) এবং এর মেয়াদকালীন বিন্যাস ক্লাস ব্যবহার করা সম্ভব।

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.1</version>
</dependency>

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

String formattedDuration = DurationFormatUtils.formatDurationHMS(12313152);
// formattedDuration value is "3:25:13.152"
String otherFormattedDuration = DurationFormatUtils.formatDuration(12313152, DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN);
// otherFormattedDuration value is "P0000Y0M0DT3H25M13.152S"

আশা করি এটি সাহায্য করতে পারে ...


8
long second = TimeUnit.MILLISECONDS.toSeconds(millis);
long minute = TimeUnit.MILLISECONDS.toMinutes(millis);
long hour = TimeUnit.MILLISECONDS.toHours(millis);
millis -= TimeUnit.SECONDS.toMillis(second);
return String.format("%02d:%02d:%02d:%d", hour, minute, second, millis);

2
এটি সঠিক বলে মনে হচ্ছে না। নেই TimeUnit.MILLISECONDS.toSeconds(), উদাহরণস্বরূপ, সেকেন্ড বা অবশিষ্ট সেকেন্ডের মধ্যে একই সময়কাল রূপান্তর মিলিসেকেন্ড ঘন্টা এবং মিনিট বিয়োগ পরে? সমাধানটির উত্তরোত্তর প্রয়োজন।
ডেরেক মাহর

এই পদ্ধতি ভুল, এটা ফেরৎ 431220: 25873204: 1552392282: 0 যদি আমি তারিখ রূপান্তর করতে চান মার্চ 12 201913h04 42s
0ddlyoko

6
public static String timeDifference(long timeDifference1) {
long timeDifference = timeDifference1/1000;
int h = (int) (timeDifference / (3600));
int m = (int) ((timeDifference - (h * 3600)) / 60);
int s = (int) (timeDifference - (h * 3600) - m * 60);

return String.format("%02d:%02d:%02d", h,m,s);

4

এরকম

logEvent.timeStamp / (1000*60*60)

আপনাকে ঘন্টা দেবে, মিনিট নয়। চেষ্টা করুন:

logEvent.timeStamp / (1000*60)

এবং আপনি একই উত্তর দিয়ে শেষ হবে

TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)

তবে টাইমউনিত.মিলিএসইএনসিএনডিএস.টোমিনিটস (লগএভেন্ট.টাইমস্ট্যাম্প) আমার আবর্জনাও দেয়। 21489586 মিনিট নয়!
ক্র্যাটিলাস

1
এটি 01/01/1970 থেকে কেটে যাওয়া মিনিটের সংখ্যা।
নিকো হুইসামেন

ঠিক আছে, তাহলে আমি কীভাবে ফর্ম্যাটটি পেতে পারি? অর্থাৎ 10: 50: 40: 450? 1970 সাল থেকে মিনিটের সংখ্যাটি কীভাবে ব্যবহার করতে হয় তা আমি জানি না
ক্র্যাটিলাস

দুঃখিত, আপনি কেবল এটি কীভাবে বোঝাতে চান তা জানতে চেয়েছিলেন বলে দুঃখিত। সিনিয়র পোস্টটি দেখুন, এটি আবরণ করা উচিত।
নিকো হুইসামেন

3

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

    String sMillis = "10997195233";
    double dMillis = 0;

    int days = 0;
    int hours = 0;
    int minutes = 0;
    int seconds = 0;
    int millis = 0;

    String sTime;

    try {
        dMillis = Double.parseDouble(sMillis);
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }


    seconds = (int)(dMillis / 1000) % 60;
    millis = (int)(dMillis % 1000);

    if (seconds > 0) {
        minutes = (int)(dMillis / 1000 / 60) % 60;
        if (minutes > 0) {
            hours = (int)(dMillis / 1000 / 60 / 60) % 24;
            if (hours > 0) {
                days = (int)(dMillis / 1000 / 60 / 60 / 24);
                if (days > 0) {
                    sTime = days + " days " + hours + " hours " + minutes + " min " + seconds + " sec " + millis + " millisec";
                } else {
                    sTime = hours + " hours " + minutes + " min " + seconds + " sec " + millis + " millisec";
                }
            } else {
                sTime = minutes + " min " + seconds + " sec " + millis + " millisec";
            }
        } else {
            sTime = seconds + " sec " + millis + " millisec";
        }
    } else {
        sTime = dMillis + " millisec";
    }

    System.out.println("time: " + sTime);

0
    long hours = TimeUnit.MILLISECONDS.toHours(timeInMilliseconds);
    long minutes = TimeUnit.MILLISECONDS.toMinutes(timeInMilliseconds - TimeUnit.HOURS.toMillis(hours));
    long seconds = TimeUnit.MILLISECONDS
            .toSeconds(timeInMilliseconds - TimeUnit.HOURS.toMillis(hours) - TimeUnit.MINUTES.toMillis(minutes));
    long milliseconds = timeInMilliseconds - TimeUnit.HOURS.toMillis(hours)
            - TimeUnit.MINUTES.toMillis(minutes) - TimeUnit.SECONDS.toMillis(seconds);
    return String.format("%02d:%02d:%02d:%d", hours, minutes, seconds, milliseconds);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.