我试图从文件中减去两个连续行的日期和时间,例如:
String result1=line2-line1;
String result2=line4-line3;
// and so on.........
示例文件内容可能如下:
Thu Jan 16 2014 16:59:43.5020
Thu Jan 16 2014 16:59:43.5020
Thu Jan 16 2014 16:59:43.5020
Thu Jan 16 2014 16:59:43.5090
Thu Jan 16 2014 16:59:43.5100
Thu Jan 16 2014 16:59:43.5100
Thu Jan 16 2014 16:59:43.5170
Thu Jan 16 2014 16:59:43.9190
Thu Jan 16 2014 16:59:43.9200
Thu Jan 16 2014 16:59:43.9200
Thu Jan 16 2014 16:59:43.9200
Thu Jan 16 2014 16:59:43.9210
Thu Jan 16 2014 16:59:43.9210
Thu Jan 16 2014 16:59:43.9210
Thu Jan 16 2014 16:59:43.9210
Thu Jan 16 2014 16:59:43.9210
Thu Jan 16 2014 16:59:43.9220
Thu Jan 16 2014 16:59:43.9290
Thu Jan 16 2014 16:59:43.9290
Thu Jan 16 2014 16:59:43.9290
Thu Jan 16 2014 16:59:43.9330
Thu Jan 16 2014 16:59:44.0210
Thu Jan 16 2014 16:59:44.0210
Thu Jan 16 2014 16:59:44.0210
答案 0 :(得分:1)
使用子句
DateFormat df = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss.SSSS",
Locale.ENGLISH);
System.out.println( df.parse(line2).getTime() - df.parse(line1).getTime() );
答案 1 :(得分:0)
尝试以下代码...
您可以根据需要实施基本逻辑
String string1 = "Oct 15, 2012 1:07:13 PM";
String string2 = "Oct 23, 2012 03:43:34 PM";
//here you want to mention the format that you want
SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy h:mm:ss a", Locale.ENGLISH);
Date date1 = sdf.parse(string1);
Date date2 = sdf.parse(string2);
//to found difference between two dates
long differenceInMillis = date2.getTime() - date1.getTime();
答案 2 :(得分:0)
假设您已获得该文件的上下文。 string line1包含第一行的文本,第二行的string line2contain文本。
int datedifference=Integer.parseInt(line2.substring(8,10))-Integer.parseInt(line1.substring(8,10));
int yeardifference=Integer.parseInt(line2.substring(11,15))-Integer.parseInt(line1.substring(11,15));
int hourdifference=Integer.parseInt(line2.substring(16,18))-Integer.parseInt(line1.substring(16,18));
int minutedifference=Integer.parseInt(line2.substring(19,21))-Integer.parseInt(line1.substring(19,21));
int seconddifference=Integer.parseInt(line2.substring(22,23))-Integer.parseInt(line1.substring(22,23));
int lastthingdifference=Integer.parseInt(line2.substring(24,28))-Integer.parseInt(line1.substring(24,28));
然后你得到了你需要的所有内容,只需按你喜欢的方式重新排列
注意:对于日期,您可能必须设置将天数转换为int的逻辑。
干杯
答案 3 :(得分:0)
这将修剪任何空白区域......我在这里得到这个你应该非常小心地提到你想要提取的字符串索引并减去例如:
startIndex:starts from index 0(inclusive).
endIndex:starts from index 1(exclusive).
int datedifference = Integer.parseInt(line2.substring(8,10).trim()) - Integer.parseInt(line1.substring(8,10).trim());
答案 4 :(得分:0)
Duration.between( // Calculate and represent the span of time elapsed.
LocalDateTime.parse( // Parse the input string as a `LocalDateTime` because it lacks any indicator of time zone or offset-from-UTC.
"Thu Jan 16 2014 16:59:43.5020" , // Work with each pair of input strings.
DateTimeFormatter.ofPattern( "EEE MMM dd uuuu HH:mm:ss.SSSS" , Locale.US ) // Define a formatting pattern to match your input. Specify human language for translation via `Locale` object.
) ,
LocalDateTime.parse(
"Thu Jan 16 2014 16:59:43.5090" ,
DateTimeFormatter.ofPattern( "EEE MMM dd uuuu HH:mm:ss.SSSS" , Locale.US )
)
)
以List
行的形式阅读您的文件。
List< String > lines = Files.readAllLines( pathGoesHere ) ;
顺便说一句,你的问题中使用的格式很糟糕。
尽可能使用标准ISO 8601格式将日期时间值序列化为文本。
现代方法使用行业领先的 java.time 类,这些类取代了麻烦的旧遗留类,例如Date
/ Calendar
/ SimpleDateFormat
。< / p>
定义匹配每一行的格式化模式。请注意Locale
参数,该参数指定在翻译文本时使用的人类语言和文化规范。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd uuuu HH:mm:ss.SSSS" , Locale.US ) ; // Thu Jan 16 2014 16:59:43.5020
将每个输入行解析为LocalDateTime
,因为输入缺少任何时区指示符或与UTC的偏移量。
LocalDateTime ldt = LocalDateTime.parse( "Thu Jan 16 2014 16:59:43.5020" , f );
ldt.toString():2014-01-16T16:59:43.502
循环输入行,缓存每一对,并进行比较。使用Duration
类计算并表示经过的时间跨度。
for( int index = 0 , index < lines.size() , index + 2 ) { // Increment by two, as we are processing pairs together.
String inputStart = lines.get( index ) ;
LocalDateTime start = LocalDateTime.parse( inputStart , f ) ;
String inputStop = lines.get( index + 1 ) ; // Move index to second of this pair of lines.
LocalDateTime stop = LocalDateTime.parse( inputStop , f ) ;
// Calculate the time elapsed using generic 24-hour based days, as we lack any time zone or offset-from-UTC.
Duration d = Duration.between( start , stop ) ;
}
您可以通过各种方式使用该Duration
对象:
to…Part
方法询问每个部分:小时,分钟和秒以及小数秒。 PnYnMnDTnHnMnS
中生成字符串,其中P
标记开头,T
将小时 - 分钟 - 秒与任何年 - 月 - 天分开。 plus
/ minus
方法。请注意,上述解决方案不值得信赖,因为LocalDateTime
不代表片刻,不时间轴上的某个点。要确定片刻,您必须将LocalDateTime
放入特定时区的上下文中。在那之前,它没有任何实际意义。 Duration
计算使用通用的24小时工作日完成,而不考虑夏令时(DST)等异常情况。
如果您确定知道输入数据的时区,请应用ZoneId
获取ZonedDateTime
。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdtStart = start.atZone( z ) ;
然后继续计算Duration
。
Duration d = Duration.between( zdtStart , zdtStop ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?