Android 获取date.gettime()中的负值

Android 获取date.gettime()中的负值,android,date,simpledateformat,datetime-format,Android,Date,Simpledateformat,Datetime Format,当我试图将字符串值解析为date时,当我尝试执行date.getTime()时,我得到的是负值 这是我正在解析的字符串“01:00:07”。 这是日期对象中的值,我得到“Thu Jan 01:00:07 GMT+05:30 1970”。 还在getTime()中,我得到了负值“-16193000” 实现此目标的代码: long sum = 0; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");//

当我试图将字符串值解析为date时,当我尝试执行date.getTime()时,我得到的是负值

这是我正在解析的字符串“01:00:07”。 这是日期对象中的值,我得到“Thu Jan 01:00:07 GMT+05:30 1970”。 还在getTime()中,我得到了负值“-16193000”

实现此目标的代码:

long sum = 0;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");// I have also tried "HH:mm:ss" format. it gives same result
    Date date = simpleDateFormat.parse(duration);//duration is "01:00:07"
    sum= date.getTime();

simpleDataFormat.setTimeZone(TimeZone.getTimeZone(“GMT”)
您必须添加您的时区

simpleDateFormat.setTimeZone(timezone.getTimeZone(“GMT”)您必须添加时区

问题是时区偏移。使用:

long sum = 0;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");// I have also tried "HH:mm:ss" format. it gives same result
Date date = null;//duration is "01:00:07"
try {
    date = simpleDateFormat.parse("01:00:07");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    sum= cal.getTimeInMillis() + (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET));
    System.out.println("Date =" + date);
    System.out.println("sum =" + sum);
} catch (ParseException e) {
    e.printStackTrace();
}

问题是时区偏移。使用:

long sum = 0;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");// I have also tried "HH:mm:ss" format. it gives same result
Date date = null;//duration is "01:00:07"
try {
    date = simpleDateFormat.parse("01:00:07");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    sum= cal.getTimeInMillis() + (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET));
    System.out.println("Date =" + date);
    System.out.println("sum =" + sum);
} catch (ParseException e) {
    e.printStackTrace();
}

问题是时区
。通过提供
时区

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));


问题是时区。通过提供
时区

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

java.time
Duration
输出此奇数字符串:

PT1H7S

读作:1小时7秒的时间段

该字符串是标准格式的。
Duration
只能解析标准格式。因此,我使用
String.replaceFirst
将字符串转换为它

让我猜猜,你需要总结持续时间吗?有一种
plus
方法:

    Duration sum = Duration.ZERO;
    sum = sum.plus(dur);
还有一些转换为秒或毫秒的方法

不要在持续时间内使用日期时间类。这将导致混乱和错误

如果您绝对不想要外部依赖项(只有在移动到API级别26之前),请手动将字符串解析为秒,并在
int
中表示它们。将其包装在您自己的自定义类中

问题:我可以在Android上使用java.time吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用
    java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻
java.time
Duration
输出此奇数字符串:

PT1H7S

读作:1小时7秒的时间段

该字符串是标准格式的。
Duration
只能解析标准格式。因此,我使用
String.replaceFirst
将字符串转换为它

让我猜猜,你需要总结持续时间吗?有一种
plus
方法:

    Duration sum = Duration.ZERO;
    sum = sum.plus(dur);
还有一些转换为秒或毫秒的方法

不要在持续时间内使用日期时间类。这将导致混乱和错误

如果您绝对不想要外部依赖项(只有在移动到API级别26之前),请手动将字符串解析为秒,并在
int
中表示它们。将其包装在您自己的自定义类中

问题:我可以在Android上使用java.time吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用
    java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

总和的数据类型是什么?希望你把它当作longdatatype的sum是longy你在哪个时区?日期和持续时间是两个完全不同的野兽。你的问题是你在用一个代替另一个。例如,请参见仅供参考的示例,诸如
java.util.date
java.util.Calendar
、和
java.text.SimpleDateFormat
等麻烦的旧日期-时间类现在是遗留的,被这些类所取代。大部分java.time功能都在项目中被向后移植到Java6和Java7。进一步适应早期Android(sum的数据类型是什么?希望你把它当作LongSum的数据类型是longyou在哪个时区?日期和持续时间是两个完全不同的野兽。你的问题是你把一个错误地用在了另一个上。例如,请参见FYI,一些麻烦的旧日期时间类,如
java.util.Date
java.util.Calendar
java.text.SimpleDateFormat
现在是遗留的,被类所取代。大多数java.time功能在项目中被向后移植到java 6和java 7。进一步适用于早期的Android(在
12:00:07
的情况下,
hh
hh
不会给出相同的结果。在
12:00:07
的情况下,
hh
hh
不会给出相同的结果。