所以我一直试图从字符串中取出时间戳,文件名更具体。
我尝试制作子字符串,但时间戳的大小是可变的。
例如,有时它是这样的:
2016-05-05 03:45:00.907text.txt
有时也喜欢这样:
2016-05-05 03:45:00.83text.txt
也许正则表达式是答案?
要处理的字符串将始终具有时间戳加文件名。文件名可以以数字或字母开头。
我忘了说它是为了Java。
答案 0 :(得分:1)
此sed
将清除时间戳
$ echo "2016-05-05 03:45:00.83text.txt" |
sed -r 's/^[0-9]{4}(-[0-9]{2}){2} ([0-9]{2}:){2}[0-9]{2}\.[0-9]{2,3}//'
text.txt
也适用于其他情况,但是如果您的文件名是“7text.txt”,则不会知道区别。
答案 1 :(得分:0)
这将删除前导时间戳:
filename = filename.replaceAll("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(\\.\\d+)?", "");
但是你无法区分短期"当另一部分以数字开头时,时间戳和另一部分的开始。
这也处理时间戳有整秒(并且没有小数结束)。
答案 2 :(得分:0)
String input = "2016-05-05 03:45:00.907text.txt";
String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d+";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if(matcher.find()){
String output = matcher.group();
Date date = formatter.parse(output);
long time = date.getTime();
System.out.println(time);
}
您必须使用正则表达式查找日期,然后在适当的日期转换字符串,然后才能获得时间戳。