我如何从 Date.getTime() 获取 int 值(long 值)

How do i get int value from Date.getTime() (long value)

[目的]

2个值(long型)相除后如何得到int值。

[问题]

我更改了时间(todaySeatedEndDateStr的HH:mm:ss部分),但无法获取准确值

而且我不确定该值是否正确。

主要公式>

c'' = b / (a+b) * c

终于要C了''

Situation pic

#测试代码

import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeCalculateTest {
    public static void main(String[] args) throws Exception {

        //2016-09-20 00:00:00 (Today's start point)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String todayStartDateStr = "2016-09-20 00:00:00"; 
        Date todayStartDate = sdf.parse(todayStartDateStr);

        //2016-09-19 23:30:00 (Yesterday's particular point)
        String yesterdaySeatedStartDateStr = "2016-09-19 23:30:00";
        Date yesterdaySeatedStartDate = sdf.parse(yesterdaySeatedStartDateStr);

        //2016-09-20 03:30:00 (Today's particular point)
        String todaySeatedEndDateStr = "2016-09-20 21:30:00";
        Date todaySeatedEndDate = sdf.parse(todaySeatedEndDateStr);

        System.out.println("Today's Start Date String : " + todayStartDateStr);
        System.out.println("Today's Start Date Long: " + todayStartDate.getTime());

        System.out.println("Yesterday's Start Date String : " + yesterdaySeatedStartDateStr);
        System.out.println("Yesterday Start Date Long : " + yesterdaySeatedStartDate.getTime());

        System.out.println("Today's End Date String : " + todaySeatedEndDateStr);
        System.out.println("Today's End Date Long : " + todaySeatedEndDate.getTime());

        int c = 500; // <------ c 
        System.out.println("c: " + c);
        if (yesterdaySeatedStartDate.compareTo(todayStartDate) < 0) {

            long a = yesterdaySeatedStartDate.getTime(); // <----- a
            long b = todaySeatedEndDate.getTime(); // <------ b
            long abSum = a + b; // <------ a+b

            System.out.println("Yesterday's long value : " + a);
            System.out.println("Today's long value : " + b);
            System.out.println("---> Sum : " + abSum);

            long result = (long) ((float)b / (float)abSum * c);
            System.out.println("---> Result : " + result);
            System.out.println("------->to int : " + (int)result );
        }
    }
}

输出 >

Today's Start Date String : 2016-09-20 00:00:00
Today's Start Date Long: 1474297200000
Yesterday's Start Date String : 2016-09-19 23:30:00
Yesterday Start Date Long : 1474295400000
Today's End Date String : 2016-09-20 21:30:00
Today's End Date Long : 1474374600000
c: 500
Yesterday's long value : 1474295400000
Today's long value : 1474374600000
---> Sum : 2948670000000
---> Result : 250
------->to int : 250

我更改了 'todaySeatedEndDateStr' 变量的 HH:mm:ss、

但总是得到 250。

我该如何解决这个问题?

请帮助我..

ab 都是自 1970 年 1 月以来以毫秒为单位测量的,因此即使 a 是昨天而 b 是今天,它们也大致相同。所以b / (a + b)很接近一半,500的一半就是250。

如果我对你的图表的解释正确,你想改为这样做:

        long midnight = todayStartDate.getTime();
        long result = (long) ((float) (b - midnight) / (float) (b - a) * c);

现在我将自午夜以来的时间与自昨天以来的时间成正比。请尝试看看它是否适合您。

前期开始到后期结束的午夜?

看起来你把原来的问题复杂化了。似乎您的问题图片需要从前期日期的午夜到后期的经过时间。如果不是这样,请编辑您的问题,以简单的会话英语说明问题陈述是什么。如果日期时间值是硬编码的,为什么还要使用单词 "yesterday" 和 "today"?

java.time

您正在使用麻烦的旧旧日期时间 类,现在已被 java.time 类.

取代

我们解析为 LocalDateTime 个对象,因为您的输入缺少关于与 UTC 的偏移量或时区的信息。如果您想考虑夏令时 (DST) 等问题,请改用 ZonedDateTime

为了解析,我们将中间的 SPACE 替换为 T 以符合 ISO 8601 标准。

LocalDateTime earlierStart = LocalDate.parse( "2016-09-19 23:30:00".replace( " " , "T" ) );

LocalDateTime laterStop = LocalDate.parse( "2016-09-20 21:30:00".replace( " " , "T" ) );

要得到起点的午夜结束,我们需要经过LocalDate。我们移动到 天的开始,因为获取一天的最后时刻对于无限可除的小数秒是有问题的。

LocalDate localDateOfStartNextDay = earlierStart.toLocalDate().plusDays( 1 );
LocalDateTime newDayAfterStart = localDateOfStartNextDay.atStartOfDay();

现在将经过的时间捕获为 Duration,分辨率为纳秒。

Duration duration = Duration.between( newDayAfterStart , laterStop );

考虑到您的问题令人困惑,此代码可能不完全是您的解决方案。但我认为你可以看到,使用 java.time 类 会比尝试对从纪元开始计数的数字进行数学运算更容易。

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old date-time classes such as java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Joda-Time project, now in maintenance mode,建议迁移到java.time。

要了解更多信息,请参阅 Oracle Tutorial。并在 Stack Overflow 中搜索许多示例和解释。

许多 java.time 功能被反向移植到 ThreeTen-Backport and further adapted to Android in ThreeTenABP (see 中的 Java 6 & 7)。

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.