我如何从 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
- a, b : 长型
- c : 整数类型
- c'' : 整数类型
终于要C了''
#测试代码
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。
我该如何解决这个问题?
请帮助我..
a
和 b
都是自 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.
[目的]
2个值(long型)相除后如何得到int值。
[问题]
我更改了时间(todaySeatedEndDateStr的HH:mm:ss部分),但无法获取准确值
而且我不确定该值是否正确。
主要公式>
c'' = b / (a+b) * c
- a, b : 长型
- c : 整数类型
- c'' : 整数类型
终于要C了''
#测试代码
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。
我该如何解决这个问题?
请帮助我..
a
和 b
都是自 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
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.