背景:
在我的数据库表中,我有两个时间戳
timeStamp1 = 2011-08-23 14:57:26.662
timeStamp2 = 2011-08-23 14:57:26.9
当我执行“按时间戳ASC排序”时,时间戳2被认为是更大的时间戳(这是正确的)。
要求:我需要得到这些时间戳的差异(timeStamp2-timeStamp1)
我的实施:
public static String timeDifference(String now, String prev) {
try {
final Date currentParsed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(now);
final Date previousParsed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(prev);
long difference = currentParsed.getTime() - previousParsed.getTime();
return "" + difference;
} catch (ParseException e) {
return "Unknown";
}
}
答案应该是238ms,但返回的值是-653ms。我不确定我做错了什么。有什么建议吗?
我建议利用乔达的时间。它妥善处理这些情况。在下面的示例中,毫秒被正确地解析为200ms。
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class ParseMillis {
public static void main(String[] args) {
String s = "00:00:01.2";
DateTimeFormatter format = DateTimeFormat.forPattern("HH:mm:ss.S");
DateTime dateTime = format.parseDateTime(s);
System.out.println(dateTime.getMillisOfSecond());
}
}
我不完全确定,但是JavaDoc指出:
对于解析,除非需要分隔两个相邻字段,否则忽略模式字母的数量。
这表示从2011-08-23 14:57:26.9开始的毫秒将被解析为
9
,而不是900
。添加后面的零可能有效:2011-08-23 14:57:26.900
。
您正在分析的格式与使用的格式不匹配。您需要一个三位数的字段,并且只提供一位数。它需要9
,并假设您的意思是009
,而您想要的是900
。日期格式很复杂,当您以不同的格式证明日期时,它可能会对您进行不同的解析。
文档中说,S
表示毫秒数,该字段中的数字是9,因此它的行为正常。
编辑:这个例子可能会有所帮助
final SimpleDateFormat ss_SSS = new SimpleDateFormat("ss.SSS");
ss_SSS.setTimeZone(TimeZone.getTimeZone("GMT"));
for (String text : "0.9, 0.456, 0.123456".split(", ")) {
System.out.println(text + " parsed as \"ss.SSS\" is "
+ ss_SSS.parse(text).getTime() + " millis");
}
印刷品
0.9 parsed as "ss.SSS" is 9 millis
0.456 parsed as "ss.SSS" is 456 millis
0.123456 parsed as "ss.SSS" is 123456 millis
我需要使用日期模式“yyyy-MM-dd”从输入字符串中解析一个日期,如果日期将以任何其他格式出现,则抛出一个错误。 这是我解析日期的一段代码: 当我在myDate中输入“2011-06-12”这样的字符串时,我将得到输出“2011年9月29日星期四00:00:00 EEST”,这很好。 当我发送了一个不正确的字符串,比如“2011-0612”,我得到了预期的错误。 当我试图传递一个仍然有两个“连
每当我键入print时,代码都是而不是从文件中看到的。 对这种行为有什么解决办法吗?
可能很简单,但是我找不到正确的格式来解析数据帧中的日期。 解析日期:2021年4月1日Thu(df名称:df data,列名:Date) 我的尝试: “”date_p=pd.to_datetime(nba_data.date,format=“%a%b%-m%y”)“” 我知道“-”根据错误是格式中的一个错误指令。然而,据我所知,只有%m会指01而不是1。我的假设对吗。 会非常感谢任何帮助。
运行时错误: 线程"main"java.time.format.DateTimeParseException中的异常:无法在索引20解析文本'1999-09-09 09:09:09.999' 如何解决我的案子?
我试图了解更多关于java线程转储的信息。我正在使用JBOSS EAP 4.3。 目前,我在我的一个环境中面临性能问题。突然,CPU利用率上升到700%。我把线程转储了,它是一个巨大的文件。 我在我的threaddump中发现了很多下面等待的线程条目。 我想从上面的等待线程中理解。是什么导致CPU利用率上升?
我正在运行一个2节点的elasticsearch集群,并将我的所有索引配置为2个主碎片和1个副本。起初,我认为每个节点将存储1个主碎片和1个副本,尽管这不是正在发生的事情。 如上所示,每个碎片都由单个节点托管,没有分配副本。 我做错了什么?