В JavaScript даты могут быть преобразованы в число миллисекунд с момента epoc, вызвав метод getTime()
или просто используя дату в числовом выражении.
Итак, чтобы получить разницу, просто вычтите две даты.
Чтобы создать новую дату на основе разности, просто передайте количество миллисекунд в конструкторе.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
Это должно работать только
EDIT: Исправлена ошибка, отмеченная @bdukes
EDIT:
Для объяснения поведения oldBegin
, oldEnd
и newBegin
являются Date
экземплярами , Операторы вызова +
и -
будут запускать автоматическое кастинг Javascript и автоматически вызывают метод прототипа valueOf()
для этих объектов. Бывает, что метод valueOf()
реализован в объекте Date
в качестве вызова getTime()
.
Итак, в основном: date.getTime() === date.valueOf() === (0 + date) === (+date)
Используйте DecimalFormat для этого случая, что-то вроде:
double mean = 0.592993499999999;
NumberFormat formatter = new DecimalFormat("#0.000000000000000");
System.out.println(formatter.format(mean));
Использовать 16-значный десятичный разряд "% .16f"
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width)).concat("s = ");
System.out.printf(f.concat("%.16f\n"), "mean", stats.mean());
System.out.printf(f.concat("%.16f\n"), "stddev", stats.stddev());
System.out.printf(f.concat("[%.16f, %.16f]"), confidence, stats.confidenceLo(), stats.confidenceHi());
Я использовал метод String.valueOf(aDoubleNumber)
и изменил% f на% s в ваших выражениях printf. Это сработало для меня.
public static void main(String[] args)
{
double mean = 0.5929934999999997;
double stddev = 0.00876990421552567;
double confidenceLo = 0.12345666612123;
double confidenceHi = 0.123456784435369;
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width))
.concat("s = ");
// changed the %f to %s and used String.valueOf method to convert first
System.out.printf(f.concat("%s\n"), "mean", String.valueOf(mean));
System.out.printf(f.concat("%s\n"), "stddev", String.valueOf(stddev));
System.out.printf(f.concat("[%s, %s]"), confidence,
(String.valueOf(confidenceLo)), String.valueOf(confidenceHi));
}
Вывод:
среднее = 0,5929934999999997
stddev = 0,00876990421552567
95% доверительный интервал = [0,124345666612123, 0,1231456784435369]
BLOCKQUOTE>