মিলিসেকেন্ডগুলি কীভাবে মানব পাঠযোগ্য রূপে রূপান্তর করবেন?


118

আমার এক স্বেচ্ছাসেবী পরিমাণ মিলি সেকেন্ডগুলিকে দিন, ঘন্টা, মিনিট সেকেন্ডে রূপান্তর করতে হবে।

উদাহরণস্বরূপ: 10 দিন, 5 ঘন্টা, 13 মিনিট, 1 সেকেন্ড।


"আমি যে ভাষাটি ব্যবহার করছি তাতে এটি অন্তর্নির্মিত নয়, অন্যথায় আমি এটি ব্যবহার করব" " আমি বুঝতে অসুবিধা হয়। কী ভাষা? কি ওএস?
এস .লট

অ্যাকশনস্ক্রিপ্ট, যে কোনও ওএস, এটির দুর্ভাগ্য তারিখ / সময় সমর্থন রয়েছে
ফ্লাইওয়াত

3
আমি যে ভাষা চাইছি তার কোনও ভাষা আমি জানি না এবং এর কেন কারণ আছে তা আমি দেখতে পাই না। কিছু খুব সাধারণ বিভাগ / মডুলাস গণিত উত্তর ঠিক আছে।
কিপ করুন

1
সমস্ত বছরের একই সংখ্যক দিন হয় না, তাই আপনাকে বলতে হবে যে এটি কোন সময়কাল। অথবা হতে পারে, আপনি কেবল এটি 'স্ট্যান্ডার্ড' বছরগুলিতে চান (365. কিছু)?
মিলান বাবুস্কভ

@ কিপ: বুঝতে পেরেছি - প্রশ্নটি ভুলভাবে পড়ে - মিলিসেকেন্ডে ওএস টাইমস্ট্যাম্পের কথা ভাবছিল। ব-দ্বীপ সময় বা অন্তর নয়। প্রশ্নটি সম্পাদনা করার জন্য
প্রলুব্ধ করা হয়েছে

উত্তর:


226

ঠিক আছে, যেহেতু অন্য কারও পদক্ষেপ নেই, তাই আমি এটি করার জন্য সহজ কোডটি লিখব:

x = ms / 1000
seconds = x % 60
x /= 60
minutes = x % 60
x /= 60
hours = x % 24
x /= 24
days = x

আমি খুব খুশি যে আপনি দিনগুলিতে থামলেন এবং কয়েক মাস জিজ্ঞাসা করলেন না। :)

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


2
সবেমাত্র এটি একটি ফ্ল্যাশ ফাংশনে ব্যবহৃত হয়েছে। ধন্যবাদ! (সরলতার জন্য উত্সাহিত)
মাকরাম সালেহ

2
এটি সঠিকভাবে কাজ করে না। বিভাজকটি ব্যবহার করার সময় পার্সইন্ট ব্যবহার করা উচিত অন্যথায় আপনি দীর্ঘ ভাসমান মান দেখতে পাবেন। আরও ব্যাপক সমাধানের জন্য নীচে আমার উত্তরটি দেখুন।
রাজীব

17
@ গ্রেগ হিউগিল আমি খুশি যে আপনি কয়েকদিন থামলেন এবং কয়েক মাস জিজ্ঞাসা করলেন না। :) হা হা :)
মোশফিকুর

58

A কে মিলিসেকেন্ডের পরিমাণ হতে দিন। তারপরে আপনার রয়েছে:

seconds=(A/1000)%60
minutes=(A/(1000*60))%60
hours=(A/(1000*60*60))%24

ইত্যাদি% মডুলাস অপারেটর)।

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


@ সাববিবিজেএভিএ 24 কাজ করা উচিত ছিল। আপনি কোন ভাষায় আছেন? যদি /ভাসমান পয়েন্ট বিভাজন করে, আপনার মানটি কেটে ফেলতে হবে। এটি অন্যান্য উত্তরে ধরে নেওয়া /হয় যা পূর্ণসংখ্যা বিভাগ করছে।
ব্রায়ান জে

24

নীচের উভয় সমাধান জাভাস্ক্রিপ্ট ব্যবহার করে (আমি সমাধানের ভাষা অজ্ঞানী ছিল কিনা আমার কোনও ধারণা ছিল না!)। উভয় সমাধানের সময়সীমা ক্যাপচার করা হলে প্রসারিত হওয়া দরকার > 1 month

সমাধান 1: তারিখ অবজেক্টটি ব্যবহার করুন

var date = new Date(536643021);
var str = '';
str += date.getUTCDate()-1 + " days, ";
str += date.getUTCHours() + " hours, ";
str += date.getUTCMinutes() + " minutes, ";
str += date.getUTCSeconds() + " seconds, ";
str += date.getUTCMilliseconds() + " millis";
console.log(str);

দেয়:

"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"

গ্রন্থাগারগুলি সহায়ক, তবে যখন আপনি চাকাটি পুনরায় উদ্ভাবন করতে পারেন তখন কেন একটি লাইব্রেরি ব্যবহার করবেন! :)

সমাধান 2: আপনার নিজের পার্সার লিখুন

var getDuration = function(millis){
    var dur = {};
    var units = [
        {label:"millis",    mod:1000},
        {label:"seconds",   mod:60},
        {label:"minutes",   mod:60},
        {label:"hours",     mod:24},
        {label:"days",      mod:31}
    ];
    // calculate the individual unit values...
    units.forEach(function(u){
        millis = (millis - (dur[u.label] = (millis % u.mod))) / u.mod;
    });
    // convert object to a string representation...
    var nonZero = function(u){ return dur[u.label]; };
    dur.toString = function(){
        return units
            .reverse()
            .filter(nonZero)
            .map(function(u){
                return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
            })
            .join(', ');
    };
    return dur;
};

আপনার প্রয়োজনীয় ক্ষেত্রগুলি সহ একটি "সময়কাল" অবজেক্ট তৈরি করে। একটি টাইমস্ট্যাম্প ফর্ম্যাট করা তারপর সহজ হয়ে যায় ...

console.log(getDuration(536643021).toString());

দেয়:

"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"

একক এবং বহুবচন পেতে সেই লাইনটি পরিবর্তন করুন return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
ফিলিপ কামিকাজে

1
ফিলিপ কমিক্যাজ ধন্যবাদ ফিলিপ! আমি আপনার পরামর্শ অন্তর্ভুক্ত করেছি।
নিক গ্রেলে

আপনি সম্ভবত শূন্য মানগুলির সাথে বিভাগগুলি দেখাতে চান না, তাই নিম্নলিখিত ফিল্টারটি যুক্ত করা যেতে পারে ... var nonZero = function(u){ return !u.startsWith("0"); }; // convert object to a string representation... dur.toString = function(){ return units.reverse().map(function(u){ return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label); }).filter(nonZero).join(', '); };
রুস্লান উলানভ

1
ধন্যবাদ @ রাস্লান ইউলানভ! আমি এটি উদাহরণে যুক্ত করেছি (সংখ্যাটি "সত্যবাদী" কিনা তা পরীক্ষা করার জন্য সামান্য পরিবর্তন করেও)।
নিক গ্রেলে

20

এ্যাপাচি কমন্স ল্যাঙ টি DurationFormatUtils মত খুব সহায়ক পদ্ধতি আছে যা formatDurationWords


1
ধন্যবাদ! এটি ইতিমধ্যে যখন আমার কাছে একটি লাইব্রেরিতে উপস্থিত থাকে তখন এটি পছন্দ করুন ...
ল্যান্ডন কুহন

7

আপনি যে কোনও ভাষা ব্যবহার করছেন তার ডেটটাইম ফাংশনগুলি ব্যবহার করা উচিত তবে কেবল মজাদার জন্য এখানে কোডটি দেওয়া হয়েছে:

int milliseconds = someNumber;

int seconds = milliseconds / 1000;

int minutes = seconds / 60;

seconds %= 60;

int hours = minutes / 60;

minutes %= 60;

int days = hours / 24;

hours %= 24;

4

এটি আমি লিখেছি একটি পদ্ধতি। এটি গ্রহণ করে integer milliseconds valueএবং একটি প্রদান করে human-readable String:

public String convertMS(int ms) {
    int seconds = (int) ((ms / 1000) % 60);
    int minutes = (int) (((ms / 1000) / 60) % 60);
    int hours = (int) ((((ms / 1000) / 60) / 60) % 24);

    String sec, min, hrs;
    if(seconds<10)  sec="0"+seconds;
    else            sec= ""+seconds;
    if(minutes<10)  min="0"+minutes;
    else            min= ""+minutes;
    if(hours<10)    hrs="0"+hours;
    else            hrs= ""+hours;

    if(hours == 0)  return min+":"+sec;
    else    return hrs+":"+min+":"+sec;

}

4
function convertTime(time) {        
    var millis= time % 1000;
    time = parseInt(time/1000);
    var seconds = time % 60;
    time = parseInt(time/60);
    var minutes = time % 60;
    time = parseInt(time/60);
    var hours = time % 24;
    var out = "";
    if(hours && hours > 0) out += hours + " " + ((hours == 1)?"hr":"hrs") + " ";
    if(minutes && minutes > 0) out += minutes + " " + ((minutes == 1)?"min":"mins") + " ";
    if(seconds && seconds > 0) out += seconds + " " + ((seconds == 1)?"sec":"secs") + " ";
    if(millis&& millis> 0) out += millis+ " " + ((millis== 1)?"msec":"msecs") + " ";
    return out.trim();
}

2

আমি আপনার ভাষা / পছন্দের কাঠামো যেগুলি তারিখ / সময় ফাংশন / গ্রন্থাগারগুলি ব্যবহার করে তা ব্যবহার করার পরামর্শ দেব would স্ট্রিং ফর্ম্যাটিং ফাংশনগুলিও দেখুন কারণ তারা প্রায়শই তারিখ / টাইমস্ট্যাম্পগুলি পাস করার সহজ উপায় সরবরাহ করে এবং একটি মানব পাঠযোগ্য স্ট্রিং ফর্ম্যাট আউটপুট দেয়।


2

আপনার পছন্দগুলি সহজ:

  1. রূপান্তর করতে কোডটি লিখুন (উদাহরণস্বরূপ, মিলি সেকেন্ডসপার্ডে ভাগ হয়ে দিন পেতে এবং মুল্যুলাসটি মিলি সেকেন্ডস পারমওয়ার দ্বারা বিভক্ত করার জন্য এবং ঘন্টাগুলি পাওয়ার জন্য মডিউলাসটি ব্যবহার করুন এবং সেকেন্ডের জন্য 1000 দ্বারা বিভাজিত করুন mill মিলিসেকেন্ডস পারমিনিট, মিলি সেকেন্ডস পারডে = 24 * মিলি সেকেন্ডস পারহর।
  2. কোনও ধরণের অপারেটিং রুটিন ব্যবহার করুন। ইউনিক্স এবং উইন্ডোজ উভয়েরই এমন কাঠামো রয়েছে যা আপনি টিক্স বা সেকেন্ডের ধরণের মান থেকে পেতে পারেন।

2
Long serverUptimeSeconds = 
    (System.currentTimeMillis() - SINCE_TIME_IN_MILLISECONDS) / 1000;


String serverUptimeText = 
String.format("%d days %d hours %d minutes %d seconds",
serverUptimeSeconds / 86400,
( serverUptimeSeconds % 86400) / 3600 ,
((serverUptimeSeconds % 86400) % 3600 ) / 60,
((serverUptimeSeconds % 86400) % 3600 ) % 60
);

2
Long expireTime = 69l;
Long tempParam = 0l;

Long seconds = math.mod(expireTime, 60);
tempParam = expireTime - seconds;
expireTime = tempParam/60;
Long minutes = math.mod(expireTime, 60);
tempParam = expireTime - minutes;
expireTime = expireTime/60;
Long hours = math.mod(expireTime, 24);
tempParam = expireTime - hours;
expireTime = expireTime/24;
Long days = math.mod(expireTime, 30);

system.debug(days + '.' + hours + ':' + minutes + ':' + seconds);

এটি মুদ্রণ করা উচিত: 0.0: 1: 9


2

কেন শুধু এই জাতীয় কিছু করবেন না:

var এমএস = 86400;

var সেকেন্ড = এমএস / 1000; //86.4

var মিনিট = সেকেন্ড / 60; //1.4400000000000002

var ঘন্টা = মিনিট / 60; //0.024000000000000004

var দিন = ঘন্টা / 24; //0.0010000000000000002

এবং ভাসমান নির্ভুলতার সাথে কাজ করে যেমন সংখ্যা (মিনিটস টু ফিক্সড (5)) //1.44


2

জাবাতে

public static String formatMs(long millis) {
    long hours = TimeUnit.MILLISECONDS.toHours(millis);
    long mins = TimeUnit.MILLISECONDS.toMinutes(millis);
    long secs = TimeUnit.MILLISECONDS.toSeconds(millis);
    return String.format("%dh %d min, %d sec",
            hours,
            mins - TimeUnit.HOURS.toMinutes(hours),
            secs - TimeUnit.MINUTES.toSeconds(mins)
    );
}

এরকম কিছু দেয়:

12h 1 min, 34 sec

1

আমি আপনার প্রশ্নের প্রথম উত্তর মন্তব্য করতে সক্ষম নই, তবে একটি ছোট্ট ভুল আছে। ভাসমান পয়েন্ট সংখ্যাটিকে পূর্ণসংখ্যায় রূপান্তর করতে আপনার পার্সেন্ট বা ম্যাথ.ফ্লুর ব্যবহার করা উচিত, i

var days, hours, minutes, seconds, x;
x = ms / 1000;
seconds = Math.floor(x % 60);
x /= 60;
minutes = Math.floor(x % 60);
x /= 60;
hours = Math.floor(x % 24);
x /= 24;
days = Math.floor(x);

ব্যক্তিগতভাবে, আমি আমার প্রকল্পগুলিতে কফিস্ক্রিপ্ট ব্যবহার করি এবং আমার কোডটি এর মতো দেখায়:

getFormattedTime : (ms)->
        x = ms / 1000
        seconds = Math.floor x % 60
        x /= 60
        minutes = Math.floor x % 60
        x /= 60
        hours = Math.floor x % 24
        x /= 24
        days = Math.floor x
        formattedTime = "#{seconds}s"
        if minutes then formattedTime = "#{minutes}m " + formattedTime
        if hours then formattedTime = "#{hours}h " + formattedTime
        formattedTime 

1

এটি একটি সমাধান। পরে আপনি ":" দ্বারা বিভক্ত হয়ে অ্যারের মানগুলি নিতে পারেন

/**
 * Converts milliseconds to human readeable language separated by ":"
 * Example: 190980000 --> 2:05:3 --> 2days 5hours 3min
 */
function dhm(t){
    var cd = 24 * 60 * 60 * 1000,
        ch = 60 * 60 * 1000,
        d = Math.floor(t / cd),
        h = '0' + Math.floor( (t - d * cd) / ch),
        m = '0' + Math.round( (t - d * cd - h * ch) / 60000);
    return [d, h.substr(-2), m.substr(-2)].join(':');
}

var delay = 190980000;                   
var fullTime = dhm(delay);
console.log(fullTime);

1

টাইমউনাইট ব্যবহার করে আমার সমাধানটি এখানে দেওয়া হল।

আপডেট: আমার উল্লেখ করা উচিত যে এটি গ্রোভিতে লেখা হয়েছে, তবে জাভা প্রায় অভিন্ন।

def remainingStr = ""

/* Days */
int days = MILLISECONDS.toDays(remainingTime) as int
remainingStr += (days == 1) ? '1 Day : ' : "${days} Days : "
remainingTime -= DAYS.toMillis(days)

/* Hours */
int hours = MILLISECONDS.toHours(remainingTime) as int
remainingStr += (hours == 1) ? '1 Hour : ' : "${hours} Hours : "
remainingTime -= HOURS.toMillis(hours)

/* Minutes */
int minutes = MILLISECONDS.toMinutes(remainingTime) as int
remainingStr += (minutes == 1) ? '1 Minute : ' : "${minutes} Minutes : "
remainingTime -= MINUTES.toMillis(minutes)

/* Seconds */
int seconds = MILLISECONDS.toSeconds(remainingTime) as int
remainingStr += (seconds == 1) ? '1 Second' : "${seconds} Seconds"

1

এটি করার একটি নমনীয় উপায়:
(বর্তমান তারিখের জন্য তৈরি করা হয়নি তবে মেয়াদের পক্ষে যথেষ্ট ভাল)

/**
convert duration to a ms/sec/min/hour/day/week array
@param {int}        msTime              : time in milliseconds 
@param {bool}       fillEmpty(optional) : fill array values even when they are 0.
@param {string[]}   suffixes(optional)  : add suffixes to returned values.
                                        values are filled with missings '0'
@return {int[]/string[]} : time values from higher to lower(ms) range.
*/
var msToTimeList=function(msTime,fillEmpty,suffixes){
    suffixes=(suffixes instanceof Array)?suffixes:[];   //suffixes is optional
    var timeSteps=[1000,60,60,24,7];    // time ranges : ms/sec/min/hour/day/week
    timeSteps.push(1000000);    //add very big time at the end to stop cutting
    var result=[];
    for(var i=0;(msTime>0||i<1||fillEmpty)&&i<timeSteps.length;i++){
        var timerange = msTime%timeSteps[i];
        if(typeof(suffixes[i])=="string"){
            timerange+=suffixes[i]; // add suffix (converting )
            // and fill zeros :
            while(  i<timeSteps.length-1 &&
                    timerange.length<((timeSteps[i]-1)+suffixes[i]).length  )
                timerange="0"+timerange;
        }
        result.unshift(timerange);  // stack time range from higher to lower
        msTime = Math.floor(msTime/timeSteps[i]);
    }
    return result;
};

নোট : আপনি সময় সীমাটি নিয়ন্ত্রণ করতে চাইলে আপনি প্যারামিটার হিসাবে টাইমস্টেপস সেটও করতে পারেন।

কীভাবে ব্যবহার করবেন (একটি পরীক্ষার অনুলিপি করুন):

var elsapsed = Math.floor(Math.random()*3000000000);

console.log(    "elsapsed (labels) = "+
        msToTimeList(elsapsed,false,["ms","sec","min","h","days","weeks"]).join("/")    );

console.log(    "half hour : "+msToTimeList(elsapsed,true)[3]<30?"first":"second"   );

console.log(    "elsapsed (classic) = "+
        msToTimeList(elsapsed,false,["","","","","",""]).join(" : ")    );

1

আমি http://www.ocpsoft.org/ ব্যাখ্যা tytime/ ব্যবহার করার পরামর্শ দিচ্ছি tytime লাইব্রেরি ..

মানুষের পাঠযোগ্য ফর্মের মতো সময় ব্যবধান পাওয়া খুব সহজ

PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date()));

এটি "এখন থেকে মুহুর্তের" মতো মুদ্রণ করবে

অন্য উদাহরণ

PrettyTime p = new PrettyTime()); Date d = new Date(System.currentTimeMillis()); d.setHours(d.getHours() - 1); String ago = p.format(d);

তারপরে স্ট্রিং আগে = "1 ঘন্টা আগে"


0

এখানে জাভাতে আরও সুনির্দিষ্ট পদ্ধতি রয়েছে, আমি এই সাধারণ যুক্তিটি বাস্তবায়িত করেছি, আশা করি এটি আপনাকে সহায়তা করবে:

    public String getDuration(String _currentTimemilliSecond)
    {
        long _currentTimeMiles = 1;         
        int x = 0;
        int seconds = 0;
        int minutes = 0;
        int hours = 0;
        int days = 0;
        int month = 0;
        int year = 0;

        try 
        {
            _currentTimeMiles = Long.parseLong(_currentTimemilliSecond);
            /**  x in seconds **/   
            x = (int) (_currentTimeMiles / 1000) ; 
            seconds = x ;

            if(seconds >59)
            {
                minutes = seconds/60 ;

                if(minutes > 59)
                {
                    hours = minutes/60;

                    if(hours > 23)
                    {
                        days = hours/24 ;

                        if(days > 30)
                        {
                            month = days/30;

                            if(month > 11)
                            {
                                year = month/12;

                                Log.d("Year", year);
                                Log.d("Month", month%12);
                                Log.d("Days", days % 30);
                                Log.d("hours ", hours % 24);
                                Log.d("Minutes ", minutes % 60);
                                Log.d("Seconds  ", seconds % 60);   

                                return "Year "+year + " Month "+month%12 +" Days " +days%30 +" hours "+hours%24 +" Minutes "+minutes %60+" Seconds "+seconds%60;
                            }
                            else
                            {
                                Log.d("Month", month);
                                Log.d("Days", days % 30);
                                Log.d("hours ", hours % 24);
                                Log.d("Minutes ", minutes % 60);
                                Log.d("Seconds  ", seconds % 60);   

                                return "Month "+month +" Days " +days%30 +" hours "+hours%24 +" Minutes "+minutes %60+" Seconds "+seconds%60;
                            }

                        }
                        else
                        {
                            Log.d("Days", days );
                            Log.d("hours ", hours % 24);
                            Log.d("Minutes ", minutes % 60);
                            Log.d("Seconds  ", seconds % 60);   

                            return "Days " +days +" hours "+hours%24 +" Minutes "+minutes %60+" Seconds "+seconds%60;
                        }

                    }
                    else
                    {
                        Log.d("hours ", hours);
                        Log.d("Minutes ", minutes % 60);
                        Log.d("Seconds  ", seconds % 60);

                        return "hours "+hours+" Minutes "+minutes %60+" Seconds "+seconds%60;
                    }
                }
                else
                {
                    Log.d("Minutes ", minutes);
                    Log.d("Seconds  ", seconds % 60);

                    return "Minutes "+minutes +" Seconds "+seconds%60;
                }
            }
            else
            {
                Log.d("Seconds ", x);
                return " Seconds "+seconds;
            }
        }
        catch (Exception e) 
        {
            Log.e(getClass().getName().toString(), e.toString());
        }
        return "";
    }

    private Class Log
    {
        public static void d(String tag , int value)
        {
            System.out.println("##### [ Debug ]  ## "+tag +" :: "+value);
        }
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.