সেকেন্ডের মানটিকে কয়েক মিনিট সেকেন্ডে রূপান্তর করবেন?


109

আমি "1 ঘন্টা 22 মিনিট 33 সেকেন্ড" বা এ জাতীয় কোনও কিছুর মতো একটি সম্পাদনা পাঠ্য সেকেন্ডের মানকে (একটি বিগডিসিমাল ভেরিয়েবলে) স্ট্রিংয়ে রূপান্তর করার চেষ্টা করছি।

আমি এটি চেষ্টা করেছি:

String sequenceCaptureTime = "";
BigDecimal roundThreeCalc = new BigDecimal("0");
BigDecimal hours = new BigDecimal("0");
BigDecimal myremainder = new BigDecimal("0");
BigDecimal minutes = new BigDecimal("0");
BigDecimal seconds = new BigDecimal("0");
BigDecimal var3600 = new BigDecimal("3600");
BigDecimal var60 = new BigDecimal("60");

(আমার কাছে একটি গোল বৃত্তাকার তিন ক্যালিক রয়েছে যা সেকেন্ডের মধ্যে মান তাই আমি এটিকে এখানে রূপান্তরিত করার চেষ্টা করি))

hours = (roundThreeCalc.divide(var3600));
myremainder = (roundThreeCalc.remainder(var3600));
minutes = (myremainder.divide(var60));
seconds = (myremainder.remainder(var60));
sequenceCaptureTime =  hours.toString() + minutes.toString() + seconds.toString();

তারপরে আমি editText sequnceCaptureTime স্ট্রিংয়ে সেট করেছি। কিন্তু কাজ হয়নি। এটি প্রতিবার অ্যাপটিকে বন্ধ করে দিয়েছে। আমি এখানে আমার গভীরতার বাইরে, কোনও সাহায্যের প্রশংসা করা হয় is শুভ কোডিং!



আপনি বিগইন্টিজারের পরিবর্তে বিগডিসিমাল ব্যবহার করছেন এমন কোনও কারণ?
টেড হপ

আমাকে দেবের পরে এক সেকেন্ডের ভগ্নাংশ বাস্তবায়ন করতে হবে, এই মুহূর্তে আমি প্রথম স্থানটিতে গণনাটি কাজ করার চেষ্টা করছি।
খরগোশ

1
আমি দ্বিতীয় রিচার্ডের মন্তব্য - আপনার জন্য অনেক কাজ করতে আপনি টাইমউনাইট এনাম ব্যবহার করতে পারেন। বিকাশকারী.অ্যান্ড্রয়েড.
বেন জে

বিগডিসিমাল থেকে সেকেন্ডের মধ্যে এইচএইচএমএসএস এ রূপান্তর করতে আমি কীভাবে টাইমুনিট ব্যবহার করব?
খরগোশ

উত্তর:


65

আপনার আরও ভাগ্য হওয়া উচিত

hours = roundThreeCalc.divide(var3600, BigDecimal.ROUND_FLOOR);
myremainder = roundThreeCalc.remainder(var3600);
minutes = myremainder.divide(var60, BigDecimal.ROUND_FLOOR);
seconds = myremainder.remainder(var60);

এটি প্রতিটি বিভাগের পরে দশমিক মান বাদ দেবে।

সম্পাদনা করুন: যদি এটি কাজ না করে তবে এই চেষ্টা করুন। (আমি কেবল এটি লিখেছি এবং পরীক্ষা করেছি)

public static int[] splitToComponentTimes(BigDecimal biggy)
{
    long longVal = biggy.longValue();
    int hours = (int) longVal / 3600;
    int remainder = (int) longVal - hours * 3600;
    int mins = remainder / 60;
    remainder = remainder - mins * 60;
    int secs = remainder;

    int[] ints = {hours , mins , secs};
    return ints;
}

6
এই সমাধানটি আরও মনোমুগ্ধকর: stackoverflow.com/questions/625433/…
অ্যালেক্স কুচেরেঙ্কো

@ অ্যালেক্সকুচেরেনকো ছাড়া সমাধানটি মিলিসেকেন্ডের সাথে কাজ করে
মিখাইল

1
@ মিখাইল টাইমউইনিট। #### আপনাকে যেকোন সময়ের সাথে এটি করার অনুমতি দেবে।
আমির ওমিদি

1
আপনি যখনই নিজেকে সময় এবং তারিখের মানগুলির সাথে গণিত করছেন বলে মনে করেন, আপনার নিজেকে আটকাতে হবে এবং হাতের ভাষায় সঠিক API খুঁজে পাওয়া উচিত। আপনার যদি কেবল এইচএইচ: এমএম: এসএস-টাইপ প্রতিক্রিয়া দরকার হয় তবে আপনি আরও ভাল হয়ে DateUtils.formatElapsedTime
যাবেন

229

বিগডিসিমাল ব্যবহার করা কি প্রয়োজনীয়? আপনার যদি না প্রয়োজন হয় তবে আমি কয়েক সেকেন্ডের জন্য একটি দীর্ঘ বা দীর্ঘ ব্যবহার করতাম এবং এটি জিনিসগুলিকে কিছুটা সহজ করে তুলত:

hours = totalSecs / 3600;
minutes = (totalSecs % 3600) / 60;
seconds = totalSecs % 60;

timeString = String.format("%02d:%02d:%02d", hours, minutes, seconds);

যদিও তারা প্রতিটি প্যাড করতে চান তা নিশ্চিত করতে যে তারা স্ট্রিংয়ে দুটি সংখ্যার মান (বা যাই হোক না কেন)।


আমাকে দেবের পরে এক সেকেন্ডের ভগ্নাংশ বাস্তবায়ন করতে হবে, এই মুহূর্তে আমি প্রথম স্থানটিতে গণনাটি কাজ করার চেষ্টা করছি।
খরগোশ

13
String.format("%02d:%02d:%02d", hours, minutes, seconds);
জেফ্রি ব্লাটম্যান

এটি কেবল চিত্তাকর্ষক। আমি অবাক হই যে এইভাবে মডুলাস কীভাবে কাজ করতে পারে।
PSo

লোকেল ব্যবহার করুন অন্যথায় এটি আপনাকে সতর্কতা দেয়। String.format(Locale.ENGLISH, "%02d:%02d:%02d", hours, minutes, seconds)
প্রতীক বুটানি

1
আপনি যখনই নিজেকে সময় এবং তারিখের মানগুলির সাথে গণিত করছেন বলে মনে করেন, আপনার নিজেকে আটকাতে হবে এবং হাতের ভাষায় সঠিক API খুঁজে পাওয়া উচিত। আপনার যদি কেবল এইচএইচ: এমএম: এসএস-টাইপ প্রতিক্রিয়া দরকার হয় তবে আপনি আরও ভাল হয়ে DateUtils.formatElapsedTime
যাবেন

75

DateUtils.formatElapsedTime(long), " MM:SS" বা " H:MM:SS" আকারে একটি অতিবাহিত সময় বিন্যাস করুন । এটি আপনি যে স্ট্রিংয়ের সন্ধান করছেন তা ফেরত দেয়। আপনি এখানে ডকুমেন্টেশন খুঁজে পেতে পারেন


3
এই এক সহজ এবং ঠিক আমার যা প্রয়োজন। আমি অন্যদের এই পদ্ধতিটি সুপারিশ করি
নবীন

1
এটি সেকেন্ডে প্যারামিটার আশা করে ভুলে যাবেন না। সুতরাং আপনাকে মিলিসকে সেকেন্ডে রূপান্তর করতে হবে
11:56 এ কিরানক করা

28

এখানে ওয়ার্কিং কোডটি রয়েছে:

private String getDurationString(int seconds) {

    int hours = seconds / 3600;
    int minutes = (seconds % 3600) / 60;
    seconds = seconds % 60;

    return twoDigitString(hours) + " : " + twoDigitString(minutes) + " : " + twoDigitString(seconds);
}

private String twoDigitString(int number) {

    if (number == 0) {
        return "00";
    }

    if (number / 10 == 0) {
        return "0" + number;
    }

    return String.valueOf(number);
}

3
আমি এই উত্তরটি পছন্দ করি তবে আপনাকে '% 10' থেকে '/ 10' 'পরিবর্তন করতে হবে
হাকিম জায়েদ

আপনি যখনই নিজেকে সময় এবং তারিখের মানগুলির সাথে গণিত করছেন বলে মনে করেন, আপনার নিজেকে আটকাতে হবে এবং হাতের ভাষায় সঠিক API খুঁজে পাওয়া উচিত। আপনার যদি কেবল এইচএইচ: এমএম: এসএস-টাইপ প্রতিক্রিয়া দরকার হয় তবে আপনি আরও ভাল হয়ে DateUtils.formatElapsedTime
যাবেন

28

জাভা 8-এ সত্যই সহায়ক

import java.time.LocalTime;

private String ConvertSecondToHHMMSSString(int nSecondTime) {
    return LocalTime.MIN.plusSeconds(nSecondTime).toString();
}

দ্রষ্টব্য: প্লাসসেকেন্ডগুলি (দীর্ঘ সেকেন্ড) ব্যবহারের সময় গণনাটি মধ্যরাতের চারপাশে মোড়ানো হয়, উদাহরণস্বরূপ: যদি সেকেন্ডগুলি 86400 (24 ঘন্টা) হয় তবে এটি 00:00 আউটপুট করে।
করথি

নামটি 'কনভার্টসেকেন্ডটিওএইচএমএমএসএস স্ট্রিং' এর পরামর্শ অনুসারে এটি ঠিক তাই করে। অন্যান্য (ক্লান্তিকর) সমাধানগুলিও চারপাশে মোড়ানো রয়েছে।
এপিকিউরিস্ট

@ ইপিকিউরিস্ট এটি সমাধানটি আমি সন্ধান করছিলাম! আরও অনেক মার্জিত এবং অন্য সব তুলনায়! :)
পাওলো অলিভিরা

20

আমি টাইমউনিত লাইব্রেরিতে জাভা তৈরির পছন্দ করি

long seconds = TimeUnit.MINUTES.toSeconds(8);

12
private String ConvertSecondToHHMMString(int secondtTime)
{
  TimeZone tz = TimeZone.getTimeZone("UTC");
  SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
  df.setTimeZone(tz);
  String time = df.format(new Date(secondtTime*1000L));

  return time;

}

কোডটি কী করে এবং কীভাবে এটি সমস্যার সমাধান করে তা ব্যাখ্যা করে আপনি নিজের উত্তরকে আরও উন্নত করতে পারেন ;-)
2

9

এটি আমার সহজ সমাধান:

String secToTime(int sec) {
    int seconds = sec % 60;
    int minutes = sec / 60;
    if (minutes >= 60) {
        int hours = minutes / 60;
        minutes %= 60;
        if( hours >= 24) {
            int days = hours / 24;
            return String.format("%d days %02d:%02d:%02d", days,hours%24, minutes, seconds);
        }
        return String.format("%02d:%02d:%02d", hours, minutes, seconds);
    }
    return String.format("00:%02d:%02d", minutes, seconds);
}

Test Results:

Result: 00:00:36 - 36
Result: 01:00:07 - 3607
Result: 6313 days 12:39:05 - 545488745

6

আমি তাই জিনিস সহজ রাখতে পছন্দ করি:

    int tot_seconds = 5000;
    int hours = tot_seconds / 3600;
    int minutes = (tot_seconds % 3600) / 60;
    int seconds = tot_seconds % 60;

    String timeString = String.format("%02d Hour %02d Minutes %02d Seconds ", hours, minutes, seconds);

    System.out.println(timeString);

ফলাফলটি হবে: 01 ঘন্টা 23 মিনিট 20 সেকেন্ড


সংক্ষিপ্ত উত্তর, আশ্চর্যজনক
Kaveh Garshasp

5

আপনি ইউনিট চান h, minএবং secএকটি সময়কাল জন্য আপনি এই ব্যবহার করতে পারেন:

public static String convertSeconds(int seconds) {
    int h = seconds/ 3600;
    int m = (seconds % 3600) / 60;
    int s = seconds % 60;
    String sh = (h > 0 ? String.valueOf(h) + " " + "h" : "");
    String sm = (m < 10 && m > 0 && h > 0 ? "0" : "") + (m > 0 ? (h > 0 && s == 0 ? String.valueOf(m) : String.valueOf(m) + " " + "min") : "");
    String ss = (s == 0 && (h > 0 || m > 0) ? "" : (s < 10 && (h > 0 || m > 0) ? "0" : "") + String.valueOf(s) + " " + "sec");
    return sh + (h > 0 ? " " : "") + sm + (m > 0 ? " " : "") + ss;
}

int seconds = 3661;
String duration = convertSeconds(seconds);

এটি প্রচুর শর্তাধীন অপারেটর। পদ্ধতিটি সেই স্ট্রিংগুলি ফিরিয়ে দেবে:

0    -> 0 sec
5    -> 5 sec
60   -> 1 min
65   -> 1 min 05 sec
3600 -> 1 h
3601 -> 1 h 01 sec
3660 -> 1 h 01
3661 -> 1 h 01 min 01 sec
108000 -> 30 h

দুর্দান্ত সমাধান (Y)
অক্ষয় রায়য়ানি

4

এই কোডটি দুর্দান্ত কাজ করছে:

txtTimer.setText(String.format("%02d:%02d:%02d",(SecondsCounter/3600), ((SecondsCounter % 3600)/60), (SecondsCounter % 60)));

4

গ্রেগরিয়ানক্যালেন্ডার ব্যবহার করে এটি করার একটি দুর্দান্ত এবং সহজ উপায়

প্রকল্পে এগুলি আমদানি করুন:

import java.util.GregorianCalendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Scanner;

এবং তারপর:

Scanner s = new Scanner(System.in);

System.out.println("Seconds: ");
int secs = s.nextInt();

GregorianCalendar cal = new GregorianCalendar(0,0,0,0,0,secs);
Date dNow = cal.getTime();
SimpleDateFormat ft = new SimpleDateFormat("HH 'hours' mm 'minutes' ss 'seconds'");
System.out.println("Your time: " + ft.format(dNow));

1
আমি এটাকে ভালবাসি!
এডুয়ায়ো

2

আমি এটি ব্যবহার:

 public String SEG2HOR( long lnValue) {     //OK
        String lcStr = "00:00:00";
        String lcSign = (lnValue>=0 ? " " : "-");
        lnValue = lnValue * (lnValue>=0 ? 1 : -1); 

        if (lnValue>0) {                
            long lnHor  = (lnValue/3600);
            long lnHor1 = (lnValue % 3600);
            long lnMin  = (lnHor1/60);
            long lnSec  = (lnHor1 % 60);            

                        lcStr = lcSign + ( lnHor < 10 ? "0": "") + String.valueOf(lnHor) +":"+
                              ( lnMin < 10 ? "0": "") + String.valueOf(lnMin) +":"+
                              ( lnSec < 10 ? "0": "") + String.valueOf(lnSec) ;
        }

        return lcStr;           
    }

2

সমস্যাটি সমাধান করার জন্য আমার ফাংশনটি এখানে:

public static String getConvertedTime(double time){

    double h,m,s,mil;

    mil = time % 1000;
    s = time/1000;
    m = s/60;
    h = m/60;
    s = s % 60;
    m = m % 60;
    h = h % 24;

    return ((int)h < 10 ? "0"+String.valueOf((int)h) : String.valueOf((int)h))+":"+((int)m < 10 ? "0"+String.valueOf((int)m) : String.valueOf((int)m))
            +":"+((int)s < 10 ? "0"+String.valueOf((int)s) : String.valueOf((int)s))
            +":"+((int)mil > 100 ? String.valueOf((int)mil) : (int)mil > 9 ? "0"+String.valueOf((int)mil) : "00"+String.valueOf((int)mil));
}

প্রয়োজনীয় সূচি সঞ্চয় করার জন্য কেন এই শিশু উপায়ে ডাবল টাইপড ভেরিয়েবল ব্যবহার করা হচ্ছে?
এপিকিউরিস্ট

2

আমি জানি এটি বেশ পুরানো তবে জাভাতে 8:

LocalTime.MIN.plusSeconds(120).format(DateTimeFormatter.ISO_LOCAL_TIME)

2

মাত্র কয়েক মিনিট এবং সেকেন্ডের জন্য এটি ব্যবহার করুন

String.format("%02d:%02d", (seconds / 3600 * 60 + ((seconds % 3600) / 60)), (seconds % 60))

1

আমি অজগরটিতে এটি ব্যবহার করে একটি ফ্লোটকে কয়েক ঘন্টা, মিনিট, সেকেন্ড এবং মাইক্রোসেকেন্ডগুলিতে প্রতিনিধিত্ব করে at এটি যুক্তিসঙ্গতভাবে মার্জিত এবং রূপান্তর করতে স্ট্রিমটাইম মাধ্যমে একটি ডেটটাইম টাইপ রূপান্তর করার জন্য সুবিধাজনক। প্রয়োজনে এটি আরও দীর্ঘ বিরতিতে (সপ্তাহ, মাস, ইত্যাদি) সহজেই প্রসারিত হতে পারে।

    def sectohmsus(seconds):
        x = seconds
        hmsus = []
        for i in [3600, 60, 1]:  # seconds in a hour, minute, and second
            hmsus.append(int(x / i))
            x %= i
        hmsus.append(int(round(x * 1000000)))  # microseconds
        return hmsus  # hours, minutes, seconds, microsecond

1

আমি সবচেয়ে ভাল উপায় এবং কম কোড চেষ্টা করেছি তবে আমি কীভাবে আমার কোডটি লিখেছিলাম তা বুঝতে অসুবিধা হতে পারে তবে আপনি যদি গণিতে ভাল হন তবে এটি এত সহজ

import java.util.Scanner;

ক্লাস ঘন্টা {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    double s;


    System.out.println("how many second you have ");
    s =input.nextInt();



     double h=s/3600;
     int h2=(int)h;

     double h_h2=h-h2;
     double m=h_h2*60;
     int m1=(int)m;

     double m_m1=m-m1;
     double m_m1s=m_m1*60;






     System.out.println(h2+" hours:"+m1+" Minutes:"+Math.round(m_m1s)+" seconds");





}

}

আরও বেশি এটি সঠিক!


1

জাভা 8 এর সাহায্যে আপনি স্ট্রিং ফর্ম্যাটে দীর্ঘ সেকেন্ড থেকে সহজেই সময় অর্জন করতে পারেন,

LocalTime.ofSecondOfDay(86399L)

এখানে প্রদত্ত মানকে রূপান্তর করার সর্বাধিক অনুমোদিত (২৪ ঘন্টা পর্যন্ত) এবং ফলাফল হবে

23:59:59

পেশাদাররা: 1) ম্যানুয়ালি রূপান্তর করার প্রয়োজন নেই এবং একক অঙ্কের জন্য 0 যুক্ত করতে হবে

কনস: কেবল 24 ঘন্টা পর্যন্ত কাজ করুন


1

জাভা 8 এর সাহায্যে আপনি দীর্ঘ সেকেন্ড থেকে লোকালটাইম ফর্ম্যাটে সহজেই সময় অর্জন করতে পারবেন,

LocalTime.ofSecondOfDay(86399L)

এখানে প্রদত্ত মানকে রূপান্তর করার সর্বাধিক অনুমোদিত (২৪ ঘন্টা পর্যন্ত) এবং ফলাফল হবে

23:59:59

পেশাদাররা: 1) ম্যানুয়ালি রূপান্তর করার প্রয়োজন নেই এবং একক অঙ্কের জন্য 0 যুক্ত করতে হবে

কনস: কেবল 24 ঘন্টা পর্যন্ত কাজ করুন


1

জাভা.টাইম থেকে সময়কাল

    BigDecimal secondsValue = BigDecimal.valueOf(4953);
    if (secondsValue.compareTo(BigDecimal.valueOf(Long.MAX_VALUE)) > 0) {
        System.out.println("Seconds value " + secondsValue + " is out of range");
    } else {
        Duration dur = Duration.ofSeconds(secondsValue.longValueExact());
        long hours = dur.toHours();
        int minutes = dur.toMinutesPart();
        int seconds = dur.toSecondsPart();

        System.out.format("%d hours %d minutes %d seconds%n", hours, minutes, seconds);
    }

এই স্নিপেট থেকে আউটপুট হল:

1 ঘন্টা 22 মিনিট 33 সেকেন্ড

BigDecimalএই কোডটিতে যদি একটি অ-শূন্য ভগ্নাংশ থাকত তবে এটি যেমন দাঁড়িয়েছে তেমন কাজ করবে না, তবে আপনি এটি সংশোধন করতে সক্ষম হতে পারেন। কোডটি জাভা 9 এবং তারপরে কাজ করে। জাভা 8- Durationতে কয়েক মিনিট এবং সেকেন্ডে কয়েক ঘন্টা থেকে রূপান্তরটি কিছুটা শব্দময়, কীভাবে নীচের লিঙ্কটি দেখুন। আমি শব্দের সঠিক একবচন বা বহুবচন ফর্ম ( ঘন্টা বা ঘন্টা ইত্যাদি) চয়ন করতে আপনাকে রেখে যাচ্ছি ।

লিংক

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