面对一个问题,其中我试图将字符串值解析为date,而当我尝试进行date.getTime()时,我得到的是负值。
这是我正在解析的字符串“ 01:00:07”。 这是日期对象中的值,我得到的是“ Thu Jan 01 01:00:07 GMT + 05:30 1970”。 仍然在getTime()中,我得到的是负值“ -16193000”
实现此目的的代码:
npm install style-loader --save-dev
npm install css-loader --save-dev
答案 0 :(得分:1)
问题是TimeZone
。通过提供TimeZone
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
或
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
答案 1 :(得分:1)
String durationString = "01:00:07";
durationString = durationString
.replaceFirst("(\\d{2}):(\\d{2}):(\\d{2})", "PT$1H$2M$3S");
Duration dur = Duration.parse(durationString);
System.out.println(dur);
Duration
输出以下奇数字符串:
PT1H7S
读取为: 1小时7秒。
该字符串为标准ISO 8601格式。 Duration
只能解析标准格式。因此,我正在使用String.replaceFirst
将您的字符串转换为它。
让我猜猜,您需要总结持续时间吗?有一种plus
方法:
Duration sum = Duration.ZERO;
sum = sum.plus(dur);
还有一些转换为秒或毫秒的方法。
在一段时间内不要使用日期时间类。这会导致混乱和错误。
如果您绝对不希望有外部依赖关系(仅在移至API级别26之前),请手动将字符串解析为秒,并以int
表示。将其包装在您自己的自定义类中。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 2 :(得分:0)
simpleDateFormat .setTimeZone(TimeZone.getTimeZone("GMT"));
您必须添加时区
答案 3 :(得分:0)
问题是时区偏移。使用:
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();
}