我正在通过ffmpeg编辑一个视频,我必须在这里继续查看时间戳,从几秒到几毫秒.我知道这样的命令:ffmpeg -i a.ogg -ss 00:01:02 -to 00:01:03 -c copy x2.ogg.它指向秒,但我想要毫秒.我该怎么办?
我已经阅读了这个解决方案 tic(), toc() functions
tic <- function(gcFirst = TRUE, type=c("elapsed", "user.self", "sys.self"))
{
type <- match.arg(type)
assign(".type", type, envir=baseenv())
if(gcFirst) gc(FALSE)
tic <- proc.time()[type]
assign(".tic", tic, envir=baseenv())
invisible(tic)
}
toc <- function()
{
type <- get(".type", envir=baseenv())
toc <- proc.time()[type]
tic <- get(".tic", envir=baseenv())
print(toc - tic)
invisible(toc)
}
tic();
-----code----
toc();
elapsed
0.15
Run Code Online (Sandbox Code Playgroud)
但我想在几毫秒内获得很多精度?
我也在用这个
ptm <- proc.time()
---code
proc.time() - ptm
Run Code Online (Sandbox Code Playgroud)
得到这个
user system elapsed
1.55 0.25 1.84
Run Code Online (Sandbox Code Playgroud)
如何获得更多小数或更精确?
根据SimpleDateFormat类文档,Java它的日期模式不支持超过毫秒的时间粒度.
所以,日期字符串就像
通过模式解析时
实际上将.符号后面的整数解释为(接近10亿!)毫秒,而不是纳秒,导致日期
即超过11天.令人惊讶的是,使用较少数量的S符号仍会导致所有9位数被解析(而不是,例如,最左边的3位.SSS).
有两种方法可以正确处理此问题:
是否有任何其他方法可以通过向标准SimpleDateFormat实现提供模式来获得正确的解决方案,而无需任何其他代码修改或字符串操作?
我需要暂停一个while循环一段特定的毫秒数.我尝试过使用Thread.sleep(持续时间),但它不准确,特别是在循环方案中.毫秒精度在我的程序中很重要.
这是算法,我不想回去检查条件,直到expectedElapsedTime过去.
while (condition) {
time = System.currentTimeMillis();
//do something
if (elapsedTime(time) < expectedElapsedTime) ) {
pause the loop // NEED SUBSTITUTE FOR Thread.sleep()
}
// Alternative that I have tried but not giving good results is
while ((elapsedTime(time) < expectedElapsedTime)) {
//do nothing
}
}
long elapsedTime(long time) {
long diff = System.currentTimeMillis() - time;
return diff;
}
Run Code Online (Sandbox Code Playgroud) 是否System.currentTimeMillis总是返回的值固定的长度.在我的Windows Core2中,它返回一个13位长的值.
从其API:
以毫秒为单位返回当前时间.请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大.例如,许多操作系统以几十毫秒为单位测量时间.
好吧,你可能会认为这个问题已被提出,但我认为它没有.我读到的所有解决方案都有这种"拼图"技术(如getUTCMonth() + getUTCMinutes + ...).但由于我只想比较两个UTC(!)日期之间的经过秒数,因此不适用.
众所周知,您可以通过以下方式获取当前(非UTC)日期:
var d = new Date();
var t_millis = d.getTime();
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.我想以UTC 和毫秒为目前的系统日期,所以根本不要乱用字符串.AFAIK变量t_millis将包含GMT中当前时间戳的毫秒值,而不是UTC.(因为d在GMT中也是如此.除非 getTime()执行一种隐式时区转换,即在给出毫秒之前添加偏移量,但我从未在任何地方读过这些内容)
那么除了将偏移量添加到时间值之外真的没别的办法吗?我拼命地错过了getUTCTimeMillis()其他语言中已知的功能.
我们在Hive中存储了一个时间戳纪元列(BIGINT).我们希望在这个时代获得Date'yyyy-MM-dd'.问题是我的纪元是以毫秒为单位,例如1409535303522.所以选择时间戳,from_unixtime(timestamp,'yyyy-MM-dd')给出错误的日期结果,因为它预期纪元数秒.
所以我尝试将它除以1000.但是它会转换为Double,我们无法对其应用函数.当我尝试将此双精度转换为Bigint时,即使CAST也无效.
我有这个持续时间:00:00:23.323
我想将它在sql中转换为毫秒.
编辑://我试过这个,但它不是很好:
SELECT (DATEPART(hh,'12:13:14.123') * 60 * 60 * 1000)
SELECT (DATEPART(n,'12:13:14.123') * 60 * 1000)
SELECT (DATEPART(s,'12:13:14.123') * 1000)
SELECT DATEPART(ms,'12:13:14.123')
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
谢谢你的回答.
我正在尝试在android中开发一个倒数计时器.在这个例子中,我输入了一个分钟作为参数,在倒数计时器中显示.
问题是,当我输入分钟时,例如65,那么计数器将是65:00.我希望计数器显示1:05:00,即HH:MM:SS格式.
public class MainActivity extends Activity implements OnClickListener {
private Button buttonStartTime, buttonStopTime;
private EditText edtTimerValue;
private TextView textViewShowTime; // will show the time
private CountDownTimer countDownTimer; // built in android class
// CountDownTimer
private long totalTimeCountInMilliseconds; // total count down time in
// milliseconds
private long timeBlinkInMilliseconds; // start time of start blinking
private boolean blink; // controls the blinking .. on and off
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) …Run Code Online (Sandbox Code Playgroud) 在Java中,我们可以有许多不同的方式来获得当前的时间戳,但哪一个建议:
Instant.now().toEpochMilli()或System.currentTimeMillis()
milliseconds ×10
java ×4
epoch ×3
time ×2
timer ×2
android ×1
benchmarking ×1
command ×1
date ×1
ffmpeg ×1
hive ×1
html5-video ×1
java-time ×1
javascript ×1
r ×1
sleep ×1
sql ×1
sql-server ×1
utc ×1