代码之家  ›  专栏  ›  技术社区  ›  stack0114106

java时间戳格式—在一行程序解决方案中避免子字符串IndexException

  •  1
  • stack0114106  · 技术社区  · 6 年前

    我使用下面的代码来获取yyyy-MM-dd hh:MM:ss格式的时间戳。

    val load_date = java.time.LocalDateTime.now.toString.replace("T", " ").substring(0,19)
    

    但有时,子字符串抛出如下异常。

    at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 19
    at java.lang.String.substring(String.java:1963)
    

    我有一些限制要把它作为一个线性解决方案。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Anonymous    6 年前

    使用格式化程序

    最好使用格式化程序:

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.now(ZoneId.of("Europe/Simferopol"));
        String loadDate = dateTime.format(dtf);
        System.out.println(loadDate);
    

    我刚才运行这个代码时得到:

    (是的,长度是19)

    LocalDateTime.now() 例如,根据平台的不同,通常以毫秒甚至微秒的精度返回日期和时间 2018-09-18T12:57:42.959829 toString 方法,例如 2018-09-18T12:57 . 这根绳子的长度是16。尝试获取长度为16的字符串的前19个字符的子字符串会导致 StringIndexOutOfBoundsException .

    有记录在案吗?

    文件 LocalDateTime.toString 说:

    输出将是以下ISO-8601格式之一:

    • uuuu-MM-dd'T'HH:mm
    • uuuu-MM-dd'T'HH:mm:ss
    • uuuu-MM-dd'T'HH:mm:ss.SSS
    • uuuu-MM-dd'T'HH:mm:ss.SSSSSS
    • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS

    省略部分暗示为零的时间。

    我们看到第一种格式的长度是16(其他格式都是19或更长)。

    为了完整起见,从 String.substring(int, int) (我的重点):

    抛出:
    IndexOutOfBoundsException beginIndex endIndex 比这个长 String 对象 ,或 大于 结束索引

        2
  •  1
  •   Ryuzaki L    6 年前

    您也可以使用 SimpleDateFormat

    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date now = new Date();
    String strDate = sdfDate.format(now);
    
        3
  •  1
  •   Abhishek    6 年前

    请使用 日期时间格式 让我们来做这个。

    public static void main(String[] args) {
            System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }
    

    日期时间格式 请点击以下链接: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html