无法按预期将毫秒转换为秒

Posted

技术标签:

【中文标题】无法按预期将毫秒转换为秒【英文标题】:Can not convert milliseconds to seconds as expected 【发布时间】:2015-07-26 09:16:42 【问题描述】:

您好,我需要将毫秒(2015 年 7 月 25 日的 1437790538)转换为秒,但是当我尝试转换秒时它不起作用,我得到了不相关的结果。从过去两天开始,这些结果让我非常紧张。

我已经使用此代码来实现此目的

              long duration_seconds  = 1437790538;

            Calendar calendar = Calendar.getInstance();
                TimeZone tz = TimeZone.getDefault();
                calendar.setTimeInMillis(duration_seconds * 1000);
                calendar.add(Calendar.MILLISECOND,
                        tz.getOffset(calendar.getTimeInMillis()));
                 SimpleDateFormat sdf = new
                 SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                Date currenTimeZone = (Date) calendar.getTime();
                String resultabc = sdf.format(currenTimeZone);

                long curMillis = currenTimeZone.getTime() / 1000;

//长秒= (curMillis/1000) % 60;

                Log.e("test", "datee1 :" + resultabc + " , " + curMillis + " , " + seconds);

                getDurationBreakdown(curMillis);

                calculateTime(seconds);

在我需要像这样计算帖子的总时间之后

public static void calculateTime(long seconds) 

    int day1 = (int) TimeUnit.SECONDS.toDays(seconds);
    long hours1 = TimeUnit.SECONDS.toHours(seconds) - (day1 * 24);
    long minute1 = TimeUnit.SECONDS.toMinutes(seconds)
            - (TimeUnit.SECONDS.toHours(seconds) * 60);
    long second1 = TimeUnit.SECONDS.toSeconds(seconds)
            - (TimeUnit.SECONDS.toMinutes(seconds) * 60);

    Log.e("test", "time interval ::" + "Day " + day1 + " Hour " + hours1
            + " Minute " + minute1 + " Seconds " + second1);
    // int days, hours, mins, seconds, justnow;
    days = (int) day1;
    hours = (int) hours1;
    mins = (int) minute1;
    seconds = (int) second1;

    System.out.println("Day " + day1 + " Hour " + hours1 + " Minute1 "
            + minute1 + " Seconds " + second1);
 public static String getDurationBreakdown(long millis)
    
        if(millis < 0)
        
            throw new IllegalArgumentException("Duration must be greater than zero!");
        

        long days = TimeUnit.MILLISECONDS.toDays(millis);
        millis -= TimeUnit.DAYS.toMillis(days);
        long hours = TimeUnit.MILLISECONDS.toHours(millis);
        millis -= TimeUnit.HOURS.toMillis(hours);
        long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
        millis -= TimeUnit.MINUTES.toMillis(minutes);
        long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);

        StringBuilder sb = new StringBuilder(64);
        sb.append(days);
        sb.append(" Days ");
        sb.append(hours);
        sb.append(" Hours ");
        sb.append(minutes);
        sb.append(" Minutes ");
        sb.append(seconds);
        sb.append(" Seconds");

        Log.e("test", "time interval" + sb.toString());

        return(sb.toString());
    


这两种方法都给出了错误的结果。 如果有人知道如何以正确的方式做这件事,请帮我解决这个问题.. 提前致谢

【问题讨论】:

Java simple Timestamp to Date conversion 的可能重复项 @hoijui 没有得到准确的结果,这个答案不同 您的意思是那里的解决方案不适合您?如果是这样,那么您需要解释为什么/什么不起作用,以什么方式。我能想象的唯一可能的问题是您使用了不同的开始日期,或者区域设置不匹配。 我在任何地方都在搜索这个主题,得到相同的结果,但是当我实施任何答案时,得到了我们需要的不同结果。 你必须更具体。举个具体的例子。 【参考方案1】:

你的

long curMillis = currenTimeZone.getTime() / 1000;

似乎具有误导性。 .getTime() 会给你以毫秒为单位的时间,所以将它除以 1000 你会得到秒而不是毫秒...

更新

据我了解您的代码,您只想计算给定日期(以秒为单位)与实际日期之间的差异。为此,您可以这样做

long myDateInSecs = 1437790538; //  25 july 2015

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(myDateInSecs * 1000);

Calendar calendarNow = Calendar.getInstance();

long diff = calendarNow.getTime() - calendar.getTime();

long seconds = TimeUnit.MILLISECONDS.toSeconds(diff);
long minutes = TimeUnit.MILLISECONDS.toMinutes(diff); 
...

【讨论】:

我在我的代码中使用了相同的,它没有工作我尝试了很多 得到这样的结果第16641天时7分16秒47 "正确的方向" ...所以他对你想做的事情的假设也不正确?【参考方案2】:
seconds % 60

1437790538 % 60 -> 38

1437790538 是以秒为单位的时间戳,而不是毫秒。

【讨论】:

先生,我需要从几秒开始的总发帖时间,但如果我使用这种方式,它会给我最后 2 位数字,即 38,但我不想这样,我需要总秒数 如果我直接将秒传递给 calculateTime 方法,则返回总时间

以上是关于无法按预期将毫秒转换为秒的主要内容,如果未能解决你的问题,请参考以下文章

将“x hrs y min z sec”转换为秒

在 iOS 中将毫秒转换为日期

无法将“testViewController.Type”类型的值转换为预期的参数类型“UIViewController”

Hive Generic UDF:Hive 未按预期进行转换,原因是:java.lang.ClassCastException:java.util.ArrayList 无法转换为 java.util.

把毫秒换算成秒

Oracle nvl函数无法按预期工作