如何检查时间 SImpleDateFormat?

How to check time SImpleDateFormat?

我有 2 次 SimpleDateFormat :

  1. 2020-11-23T21:17:03.039023Z
  2. 2020-11-23T21:17:03Z

如何查看时间是否使用“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”或“yyyy-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");
}

您可能需要 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");
}

但请注意,以上内容实际上并未对输入进行任何验证,而只是检测一般模式,并与没有 millisecond/microsecond 精度的版本区分开来。

您可以将日期时间字符串解析为 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");
}

请注意 java.util 的日期时间 API 及其格式 API、SimpleDateFormat 已过时且容易出错。我建议你应该完全停止使用它们并切换到 modern date-time API.

Trail: Date Time. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and 了解更多关于现代日期时间 API 的信息。