将毫秒转换为分和秒?
Posted
技术标签:
【中文标题】将毫秒转换为分和秒?【英文标题】:Converting Milliseconds to Minutes and Seconds? 【发布时间】:2013-07-11 13:15:16 【问题描述】:我已经查看了之前的问题,但没有一个答案是我想要的。 如何将秒表方法中的毫秒转换为分和秒? 我有:
watch.start();
启动秒表和
watch.stop();
停止手表。我后来有
watch.getTime();
返回毫秒。我希望它在秒和分钟内返回。我该怎么做呢? 我正在寻找一种无需乘以/除以 1000 的方法,而是一种使整个计算更具可读性且不易出错的方法。
【问题讨论】:
x 毫秒 = x / 1000 秒。那么 z 秒 = z / 60 分钟。你可以做 z % 60 来找出剩余的秒数。 基本数学:1000 毫秒 = 1 秒。 60 秒 = 1 分钟。 查看此帖子:***.com/questions/625433/…。应该能得到你想要的。 这其实是一个很简单的问题。你试过什么? 你可以这样做readyandroid.wordpress.com/… 【参考方案1】:我建议使用TimeUnit
。你可以这样使用它:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
【讨论】:
我唯一的问题是我不知道:如何定义millis(它返回为“millis 无法解析为变量”,我不知道如何在系统中访问它。 out.println(); 方法。 如果毫秒已经很长,您可以只使用数字来执行此操作。几乎不需要引入一个新的库来做一个简单的计算。minutes = ((milliseconds / 1000) / 60)
这似乎是 Java 5 到 7 的最佳答案。
@Sotti Brilliant?这不解决问题!问题要求分钟和秒,作为秒表的读数,例如1 minute 30 seconds
这个答案提供分钟或 秒,例如1 minute 90 seconds
。
我想使用它,但秒数是双精度数,而不是整数,例如 1.5s。这有可能吗?【参考方案2】:
将毫秒转换为秒后(除以 1000),您可以使用 / 60
获取分钟值,使用 % 60
(余数)获取“分钟秒数”值。
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (int)((millis / 1000) % 60);
【讨论】:
你可以这样做readyandroid.wordpress.com/… 最后一行是 Timer 控件的救命稻草,改为使用设计器属性,谢谢!【参考方案3】:tl;博士
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
Java 9 及更高版本
在 Java 9 及更高版本中,创建 Duration
并调用 to…Part
方法。在这种情况下:toMinutesPart
和 toSecondsPart
。
捕捉秒表的开始和停止。
Instant start = Instant.now();
…
Instant stop = Instant.now();
在Duration
对象中表示经过的时间。
Duration d = Duration.between( start , stop );
询问每个部分,分钟和秒。
int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();
您可能还想查看您的秒表是否按预期运行了很长时间。
Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Java 8
在 Java 8 中,Duration
类缺少 to…Part
方法。您将需要按照其他答案所示进行数学运算。
long entireDurationAsSeconds = d.getSeconds();
或者让Duration
算一下。
long minutesPart = d.toMinutes();
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
见live code in IdeOne.com。
间隔:2016-12-18T08:39:34.099Z/2016-12-18T08:41:49.099Z
d.toString(): PT2M15S
d.getSeconds(): 135
经过:2M 15S
分辨率
仅供参考,now
方法的分辨率在 Java 8 和 Java 9 之间发生了变化。请参阅this Question。
Clock
的实现仅限于毫秒的分辨率。因此,您可以在纳秒内存储值,但只能在毫秒内捕获它们。
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.*
类。
从哪里获得 java.time 类?
Java SE 8、Java SE 9、Java SE 10、Java SE 11 和更高版本 - 具有捆绑实现的标准 Java API 的一部分。 Java 9 添加了一些小功能和修复。 Java SE 6 和 Java SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android java.time 类的 Android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…。【讨论】:
android 调用需要 api 级别 26。 @Killer 对于早期的 Android,请参阅 ThreeTen-Backport 和 ThreeTenABP 项目。【参考方案4】:我正在为 android 创建一个 mp3 播放器应用程序,所以我这样做是为了获取当前时间和持续时间
private String millisecondsToTime(long milliseconds)
long minutes = (milliseconds / 1000) / 60;
long seconds = (milliseconds / 1000) % 60;
String secondsStr = Long.toString(seconds);
String secs;
if (secondsStr.length() >= 2)
secs = secondsStr.substring(0, 2);
else
secs = "0" + secondsStr;
return minutes + ":" + secs;
【讨论】:
【参考方案5】:这只是基本的数学。 1000 毫秒 = 1 秒和 60000 毫秒 = 1 分钟; 就这样吧,
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
【讨论】:
有一个错误 - 第二行应该是(millis/1000-seconds)/60
【参考方案6】:
要将时间以毫秒为单位直接转换为分钟:您可以使用第二种格式
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
这将返回一个格式正确的带有时间的字符串。 它对我有用。
【讨论】:
啊哈,好一个!我刚刚测试了一个以毫秒为单位的计时器并且可以工作! 不错的方法!给定公式,似乎是毫秒/1000 % 60。给定计时器,将是 timer1.Interval 代替毫秒等。【参考方案7】: public static String getIntervalTime(long longInterval)
long intMillis = longInterval;
long dd = TimeUnit.MILLISECONDS.toDays(intMillis);
long daysMillis = TimeUnit.DAYS.toMillis(dd);
intMillis -= daysMillis;
long hh = TimeUnit.MILLISECONDS.toHours(intMillis);
long hoursMillis = TimeUnit.HOURS.toMillis(hh);
intMillis -= hoursMillis;
long mm = TimeUnit.MILLISECONDS.toMinutes(intMillis);
long minutesMillis = TimeUnit.MINUTES.toMillis(mm);
intMillis -= minutesMillis;
long ss = TimeUnit.MILLISECONDS.toSeconds(intMillis);
long secondsMillis = TimeUnit.SECONDS.toMillis(ss);
intMillis -= secondsMillis;
String stringInterval = "%02d days - %02d:%02d:%02d.%03d";
return String.format(stringInterval , dd, hh, mm, ss, intMillis);
更短的形式!
public static String getIntervalTime(long longInterval)
long intMillis = longInterval;
long dd = TimeUnit.MILLISECONDS.toDays(intMillis);
intMillis -= TimeUnit.DAYS.toMillis(dd);
long hh = TimeUnit.MILLISECONDS.toHours(intMillis);
intMillis -= TimeUnit.HOURS.toMillis(hh);
long mm = TimeUnit.MILLISECONDS.toMinutes(intMillis);
intMillis -= TimeUnit.MINUTES.toMillis(mm);
long ss = TimeUnit.MILLISECONDS.toSeconds(intMillis);
intMillis -= TimeUnit.SECONDS.toMillis(ss);
String stringInterval = "%02d days - %02d:%02d:%02d.%03d";
return String.format(stringInterval , dd, hh, mm, ss, intMillis);
测试
long delay = 1000*60*20 + 1000*5 + 10;
LOGGER.log(Level.INFO, "Delay Expected 0", getIntervalTime(delay));
输出
INFO: Delay Expected 00 days - 00:20:05.010
【讨论】:
【参考方案8】:X 毫秒 = X / 1000 秒 = (X / 1000) / 60 分钟
如果您有 100,000 毫秒,则将该值除以 1,000,剩下 100 秒。现在 100 / 60 = 1.666~ 分钟,但小数分钟没有值,所以:做 100 % 60 = 40 秒求余数,然后整数除法 100 / 60 = 1 分钟,余数 40 秒。答案:1 分 40 秒。
【讨论】:
【参考方案9】:这是完整的程序
import java.util.concurrent.TimeUnit;
public class Milliseconds
public static void main(String[] args)
long milliseconds = 1000000;
// long minutes = (milliseconds / 1000) / 60;
long minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds);
// long seconds = (milliseconds / 1000);
long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds);
System.out.format("%d Milliseconds = %d minutes\n", milliseconds, minutes );
System.out.println("Or");
System.out.format("%d Milliseconds = %d seconds", milliseconds, seconds );
我在这里“Link”找到了这个程序,那里有详细的解释。
【讨论】:
这不能解决问题。问题要求分钟和秒,作为秒表的读数。您给出两个单独的结果,分 或 seconds.d【参考方案10】:要获得手表上显示的实际小时、分钟和秒数,请尝试使用此代码
val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
【讨论】:
【参考方案11】:你可以试试这个方法:
传递 ms 值来自
Long ms = watch.getTime();
到
getDisplayValue(ms)
Kotlin 实现:
fun getDisplayValue(ms: Long): String
val duration = Duration.ofMillis(ms)
val minutes = duration.toMinutes()
val seconds = duration.minusMinutes(minutes).seconds
return "$minutesmin $secondssec"
Java 实现:
public String getDisplayValue(Long ms)
Duration duration = Duration.ofMillis(ms);
Long minutes = duration.toMinutes();
Long seconds = duration.minusMinutes(minutes).getSeconds();
return minutes + "min " + seconds "sec"
【讨论】:
【参考方案12】:我认为 Java 1.5 不支持并发 TimeUnit。否则,我建议使用 TimeUnit。以下是基于纯数学方法。
stopWatch.stop();
long milliseconds = stopWatch.getTime();
int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
【讨论】:
【参考方案13】:您可以轻松地将毫秒转换为秒、分钟和小时。
val millis = **milliSecondsYouWantToConvert**
val seconds = (millis / 1000) % 60
val minutes = ((millis / 1000) / 60) % 60
val hours = ((millis / 1000) / 60) / 60
println("--------------------------------------------------------------------")
println(String.format("%02dh : %02dm : %02ds remaining", hours, minutes, seconds))
println("--------------------------------------------------------------------")
**RESULT :**
--------------------------------------------------------------------
01h : 23m : 37s remaining
--------------------------------------------------------------------
【讨论】:
【参考方案14】:以下代码用于将 ms 转换为 [m:ss] 格式的 min:secs
int seconds;
int minutes;
String Sec;
long Mills = ...; // Milliseconds goes here
minutes = (int)(Mills / 1000) / 60;
seconds = (int)((Mills / 1000) % 60);
Sec = seconds+"";
TextView.setText(minutes+":"+Sec);//Display duration [3:40]
【讨论】:
【参考方案15】:package com.v3mobi.userpersistdatetime;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class UserActivity extends AppCompatActivity
Date startDate;
Date endDate;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
startDate = java.util.Calendar.getInstance().getTime(); //set your start time
@Override
protected void onStop()
super.onStop();
endDate = java.util.Calendar.getInstance().getTime(); // set your end time
chekUserPersistence();
private void chekUserPersistence()
long duration = endDate.getTime() - startDate.getTime();
// long duration = 301000;
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration); // minutes ok
long secs = (duration/1000) % 60; // minutes ok
Toast.makeText(UserActivity.this, "Diff "
+ diffInMinutes + " : "+ secs , Toast.LENGTH_SHORT).show();
System.out.println("Diff " + diffInMinutes +" : "+ secs );
Log.e("keshav","diffInMinutes -->" +diffInMinutes);
Log.e("keshav","secs -->" +secs);
finish();
【讨论】:
【参考方案16】:Apache Commons 语言类DurationFormatUtils
。这个类有一些开箱即用的标准格式,但也支持自定义格式。
String result = DurationFormatUtils.formatDuration(millis, "mm:ss.SSS' sec.'");
【讨论】:
【参考方案17】:我需要将毫秒转换为计时器的分钟和秒,所以我使用了这段代码。
private String getTime(long millisecond)
long min = TimeUnit.MILLISECONDS.toMinutes(millisecond);
long sec = TimeUnit.MILLISECONDS.toSeconds(millisecond) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisecond));
String time = min + ":" + sec;
return time;
对于倒车,每分钟等于 60,000 毫秒,每秒等于 1000 毫秒。所以:
long millisecond = minutes * 60000;
long millisecond = seconds * 1000;
或
long millisecond = TimeUnit.SECONDS.toMillis(seconds);
【讨论】:
【参考方案18】:这与之前的帖子有关,但我认为提出的解决方案不太正确。 为了实现正确的转换,应该这样做:
long time_millis = 1926546
int minutes = time_millis / 1000 / 60
int seconds = ((int)(time_millis / 1000) % 60) #important that this division is cast to an int
println "Build time: $minutes minutes $seconds seconds"
【讨论】:
很高兴您愿意帮助提供问题的解决方案。但是,需要改进。可能,您应该正确格式化代码,并且可以链接到要更正的问题。此外,您确定这是Java吗?请标记您使用的语言。【参考方案19】:这是一个简单的解决方案。 可以在任何方法中使用的示例调用:
StopWatch.start();
StopWatch.stop();
StopWatch.displayDiff();
以分钟和秒为单位显示启动和停止之间的差异。 (经过的时间)
import java.time.Duration;
import java.time.Instant;
public class StopWatch
private static Instant start;
private static Instant stop;
private void StopWatch()
// not called
public static void start()
start = Instant.now();
public static void stop()
stop = Instant.now();
public static void displayDiff()
Duration totalTime = Duration.between(start, stop);
System.out.println(totalTime.toMinutes() + " Minutes "
+ totalTime.toMillis() / 1000 + " Seconds");
【讨论】:
不正确。toMillis
方法将整个持续时间报告为毫秒。以上是关于将毫秒转换为分和秒?的主要内容,如果未能解决你的问题,请参考以下文章
第六章第二十五题(将毫秒数转换成小时数分钟数和秒数)(Convert milliseconds to hours, minutes, and seconds) - 编程练习题答案
C语言 已知一个从1970到现在的毫秒数,如何将这个毫秒转换为具体的日期时间?