Java 从文本文件获取时间

Java 从文本文件获取时间,java,arraylist,Java,Arraylist,到目前为止,我已经将文本文件放入一个列表数组中,并且能够搜索当天的内容。但是我找不到一种从文本文件中获取时间范围的方法 文本文件 Jack Johnson Thursday 07:00 17:45, 有没有办法从文本文件中获取这些时间值,并比较当前时间,以检查它是否落在这两个时间值之间。我已经得到了当前时间,但我就是不知道如何从文本文件中得到这两个时间值 Boolean isAvail = false; Date day = new Date(); SimpleDateFormat simp

到目前为止,我已经将文本文件放入一个列表数组中,并且能够搜索当天的内容。但是我找不到一种从文本文件中获取时间范围的方法

文本文件

Jack Johnson
Thursday 07:00 17:45,
有没有办法从文本文件中获取这些时间值,并比较当前时间,以检查它是否落在这两个时间值之间。我已经得到了当前时间,但我就是不知道如何从文本文件中得到这两个时间值

Boolean isAvail = false;
Date day = new Date();

SimpleDateFormat simpleDateformat = new SimpleDateFormat("EEEE");
String token1 = "";

Scanner inFile1 = new Scanner(new File("E:\\Folder\\text.txt")).useDelimiter(",\\s*");

List<String> availability = new ArrayList<String>();

while (inFile1.hasNext()) 
{
    token1 = inFile1.next();
    availability.add(token1);
}
inFile1.close();


String[] availabilityArray = availability.toArray(new String[0]);

String searchArray = simpleDateformat.format(day);
for (String curVal : availabilityArray)
{
    if (curVal.contains(searchArray))
    {
    System.out.println(curVal);
    }
}

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now));
Boolean isAvail=false;
日期日期=新日期();
SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“EEEE”);
字符串标记1=“”;
扫描仪填充1=新扫描仪(新文件(“E:\\Folder\\text.txt”)。使用分隔符(“,\\s*”);
列表可用性=新建ArrayList();
while(inFile1.hasNext())
{
token1=inFile1.next();
可用性。添加(令牌1);
}
inFile1.close();
String[]availabilityArray=availability.toArray(新字符串[0]);
String searchArray=SimpleDataFormat.format(天);
for(字符串曲线:availabilityArray)
{
if(曲线包含(搜索数组))
{
系统输出打印LN(曲线);
}
}
DateTimeFormatter dtf=模式的DateTimeFormatter.of(“HH:mm”);
LocalDateTime now=LocalDateTime.now();
System.out.println(dtf.format(现在));

如果可以抓取字符串,则可以使用LocalTime.parse()


如果可以抓取字符串,则可以使用LocalTime.parse()


您可以使用旧函数,这些函数可以解析并保持运行位置:

    String input = "Thursday 07:00 17:45,";

    SimpleDateFormat weekdayFormat = new SimpleDateFormat("EEEE", Locale.US);
    ParsePosition pos = new ParsePosition(0);
    Date wd = weekdayFormat.parse(input, pos);
    System.out.println("wd " + wd);

    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm", Locale.US);
    Date from = timeFormat.parse(input, pos);
    Date to = timeFormat.parse(input, pos);
    System.out.println("" + from + " - " + to);
结果是一些未使用的字段

wd Thu Jan 01 00:00:00 CET 1970
Thu Jan 01 07:00:00 CET 1970 - Thu Jan 01 17:45:00 CET 1970
使用
Date.toInstant()
或任何可以将其转换为新时间类型的工具,如LocalTime


新时代API:

给予

wd {DayOfWeek=4},ISO
{},ISO resolved to 07:00 - {},ISO resolved to 17:45

您可以使用旧函数,这些函数可以解析并保持运行位置:

    String input = "Thursday 07:00 17:45,";

    SimpleDateFormat weekdayFormat = new SimpleDateFormat("EEEE", Locale.US);
    ParsePosition pos = new ParsePosition(0);
    Date wd = weekdayFormat.parse(input, pos);
    System.out.println("wd " + wd);

    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm", Locale.US);
    Date from = timeFormat.parse(input, pos);
    Date to = timeFormat.parse(input, pos);
    System.out.println("" + from + " - " + to);
结果是一些未使用的字段

wd Thu Jan 01 00:00:00 CET 1970
Thu Jan 01 07:00:00 CET 1970 - Thu Jan 01 17:45:00 CET 1970
使用
Date.toInstant()
或任何可以将其转换为新时间类型的工具,如LocalTime


新时代API:

给予

wd {DayOfWeek=4},ISO
{},ISO resolved to 07:00 - {},ISO resolved to 17:45

使用Java8,您可以使用
LocalTime
类表示时间,并使用
regex
从文件中提取时间值。例如,使用您提供的字符串作为输入,可以执行以下操作:

    String stringWithTime = "Jack Johnson Thursday 07:00 17:45,";
    Pattern p = Pattern.compile("(\\d{2}:\\d{2})\\s(\\d{2}:\\d{2})");
    Matcher m = p.matcher(stringWithTime);

    while(m.find()) {
        LocalTime firstTime = LocalTime.parse(m.group(1));
        LocalTime secondTime = LocalTime.parse(m.group(2));

        LocalTime nowTime = LocalTime.now();

        boolean isBetween = firstTime.isBefore(nowTime) && secondTime.isAfter(nowTime);
    }

使用Java8,您可以使用
LocalTime
类表示时间,并使用
regex
从文件中提取时间值。例如,使用您提供的字符串作为输入,可以执行以下操作:

    String stringWithTime = "Jack Johnson Thursday 07:00 17:45,";
    Pattern p = Pattern.compile("(\\d{2}:\\d{2})\\s(\\d{2}:\\d{2})");
    Matcher m = p.matcher(stringWithTime);

    while(m.find()) {
        LocalTime firstTime = LocalTime.parse(m.group(1));
        LocalTime secondTime = LocalTime.parse(m.group(2));

        LocalTime nowTime = LocalTime.now();

        boolean isBetween = firstTime.isBefore(nowTime) && secondTime.isAfter(nowTime);
    }

到目前为止,您为什么不向我们展示您的代码?您需要使用
正则表达式来提取这些值。您可以检查在迭代过程中使用的当前字符是否为整数。如果是,使用迭代器的索引,您可以使用子字符串从该索引提取时间,直到最终整数。对不起,我在打电话,希望我正确理解了这个问题。在这里更新ArrayList数据…在那里添加了我的代码。感谢您提前提供的任何帮助为什么不向我们展示您的代码呢?您需要使用
正则表达式
来提取这些值。您可以检查迭代期间使用的当前字符是否为整数。如果是,使用迭代器的索引,您可以使用子字符串从该索引提取时间,直到最终整数。对不起,我在打电话,希望我正确理解了这个问题。在这里更新ArrayList数据…在那里添加了我的代码。提前谢谢你的帮助