如何检查时间简化格式?

rn0zuynd  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(367)

我有两个简单的格式:
2020-11-23t21:17:03.039023z
2020-11-23t21:17:03z
如何检查时间是否使用“yyy-mm-dd't'hh:mm:ss.sss'z”或“yyy-mm-dd't'hh:mm:ss'z”?
例子:

if ("2020-11-23T21:17:03.039023Z".contentEquals("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")) {
    Log.e("TAG", "true");
} else {
    Log.e("TAG", "false");
}
dy1byipe

dy1byipe1#

你可能想要 String#matches 这里有一个适当的正则表达式模式:

String dt = "2020-11-23T21:17:03.039023Z";
String regex = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{6}Z";
if (dt.matches(regex)) {
Log.e("TAG", "true");
}
else {
    Log.e("TAG", "false");
}

但请注意,上述方法实际上并没有对输入进行任何验证,而只是检测一般模式,并与没有毫秒/微秒精度的版本进行区分。

w1e3prcc

w1e3prcc2#

您可以将日期时间字符串解析为 Instant 检查秒的分数是否大于 0 .

import java.time.DateTimeException;
import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(isTagEnabled("2020-11-23T21:17:03.039023Z"));
        System.out.println(isTagEnabled("2020-11-23T21:17:03Z"));
    }

    static boolean isTagEnabled(String strDateTime) {
        boolean enbaled = false;
        try {
            if (Instant.parse(strDateTime).getNano() > 0) {
                enbaled = true;
            }
        } catch (DateTimeException e) {
            e.printStackTrace();
        }
        return enbaled;
    }
}

输出:

true
false

基于此,您可以将代码编写为

if (isTagEnabled("2020-11-23T21:17:03.039023Z")) {
    Log.e("TAG", "true");
} else {
    Log.e("TAG", "false");
}

注意,api的日期时间 java.util 以及它们的格式化api, SimpleDateFormat 过时且容易出错。我建议您完全停止使用它们,转而使用现代的日期时间api。
在trail:date-time了解有关现代日期时间api的更多信息。如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。

相关问题