有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过扫描仪读取日期类型的字段

   private Date startDate;


 public void readData(Scanner scanner)
    {

       // String dates = DateUtil.convertDateToShortString(startDate); 
        dates = scanner.next();

    }

如何通过扫描仪读取日期类型的startDate字段,我已尝试将该字段转换为字符串,并通过扫描仪读取,但我无法工作


共 (1) 个答案

  1. # 1 楼答案

    您可以从Scanner对象中以String形式读取中的字段,然后使用SimpleDateFormat来解析字符串

    import java.util.Date;
    import java.util.Scanner;
    import java.util.TimeZone;
    import java.text.SimpleDateFormat;
    import java.text.ParseException;
    
    public class DataReader
    {
        private Date startDate;
    
        // format to match Fri Jan 04 00:00:00 GMT 2013
        private SimpleDateFormat inDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy");
        private SimpleDateFormat outDateFormat = new SimpleDateFormat("EEE yyyy-MMM-dd hh:mm:ss z");
    
        public DataReader() {
            outDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        }
    
        public String formatStartDate() {
            return outDateFormat.format(this.startDate);
        }
    
        public void readData(Scanner scanner) {
            String token1 = scanner.next();
            String token2 = scanner.next();
            String token3 = scanner.next();
            String dateToken = scanner.next();
            String token5 = scanner.next();
    
            System.out.println("Scanned Date Token: " + dateToken);
    
            try {
                startDate = inDateFormat.parse(dateToken);
            }
            catch (ParseException ex) {
                ex.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            String data = "000005, TF-68670, AB-312172, Fri Jan 04 00:00:00 GMT 2013, 2";
            Scanner scanner = new Scanner(data);
            scanner.useDelimiter(", ");
    
            DataReader dr = new DataReader();
            dr.readData(scanner);
    
            System.out.println("Start Date: " + dr.formatStartDate());
        }
    }
    

    以下是BlueJ终端窗口中的输出:

    Scanned Date output

    有几件事需要注意:

    • 我使用一个简单的String作为main方法的输入,创建了Scanner对象。您的代码将需要从其他来源获取输入
    • 我使用了不同的SimpleDateFormat对象来解析输入和格式化输出。这是为了让您能够看到差异,因为Java的简单Date对象不存储时区。必须在用于格式化输出的SimpleDateFormat上显式设置时区(请参见类构造函数)