Java中验证时间格式:格式:yyyy-mm-dd hh:mi(精确到分钟),例如2013-01-01 12:10,速求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中验证时间格式:格式:yyyy-mm-dd hh:mi(精确到分钟),例如2013-01-01 12:10,速求相关的知识,希望对你有一定的参考价值。

参考技术A new SimpleDateFormat("yyyy-MM-dd HH:mm").parse("2013-01-01 12:10"); , 这样试试 参考技术B ^(\d4)-(0\d1|1[0-2])-(0\d1|[12]\d1|3[01]) (0\d1|1\d1|2[0-3]):([0-5]\d1)$ 这个应该可以,我测了的。。。本回答被提问者采纳 参考技术C Format转换 参考技术D SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd hh:mm");//12小时制试
fmt.format(2013-01-01 12:10);
SimpleDateFormat fmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm");//24小时制试
fmt2.format(2013-01-01 12:10);
"yyyy-MM-dd hh24:mi:ss" //oracle里面的格式
第5个回答  2013-09-17 可以用正则表达式啊 第6个回答  2013-09-17 // 判断字符串是否是yy-mm-dd字符串
    /**
     * 判断字符串是否是yy-mm-dd字符串
     * 
     * @param str
     *            待判断字符串 判断结果
     */
    public static boolean IsDateString(String str) 
        return str.matches("(\\\\d4)-(\\\\d1,2)-(\\\\d1,2)");
    

    // 判断字符串是否是0001-06-16 12:00:01 AM|||2004/2/29|||3:30 PM字符串
    /**
     * 判断字符串是否是0001-06-16 12:00:01 AM|||2004/2/29|||3:30 PM字符串
     * 
     * @param str
     *            待判断字符串 判断结果
     */
    public static boolean IsDateTimeString(String str) 
        // 1980-1-1
        // 1980-01-1
        // 1980-1-01
        // 1980-1-1 1:1
        // 1980-1-1 01:1
        // 1980-1-1 1:01
        if (str.contains(" ")) 
            return IsDateString(str.substring(0, str.indexOf(" ")))
                    && IsTime(str.substring(str.indexOf(" ") + 1));
         else 
            return IsDateString(str);
        

        // //
        // ^((\\d2(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d2(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[1-9])|(1[0-9])|(2[0-3]))\\:([0-5][0-9])((\\s)|(\\:([0-5][0-9])))?))?$
        // boolean foundMatch =
        // str.matches("^((\\\\d2(([02468][048])|([13579][26]))[\\\\-/\\\\s]?((((0?[13578])|(1[02]))[\\\\-/\\\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\\\-/\\\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\\\-/\\\\s]?((0?[1-9])|([1-2][0-9])))))|(\\\\d2(([02468][1235679])|([13579][01345789]))[\\\\-/\\\\s]?((((0?[13578])|(1[02]))[\\\\-/\\\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\\\-/\\\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\\\-/\\\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\\\s(((0?[1-9])|(1[0-9])|(2[0-3]))\\\\:([0-5][0-9])((\\\\s)|(\\\\:([0-5][0-9])))?))?$");
        // return foundMatch;
        // // return str
        // //
        // .matches("(?i)(?!(?:1582\\\\D10\\\\D(?:0?[5-9]|1[0-4]))|(?:1752\\\\D0?9\\\\D(?:0?[3-9]|1[0-3])))(?:^(?=\\\\d)(?:(\\\\d4)([-./])(0?[1-9]|1[012])\\\\2( 1500 not evenly divisible by 400 are not leap year))(?:(?:\\\\d\\\\d)(?:[02468][048]|[13579][26]))\\\\2(?:0?2)\\\\2)|(?(?=(0?[1-9]|1[012])(:[0-5]\\\\d)0,2(?:\\\\x20[AP]M))|([01]\\\\d|2[0-3])(:[0-5]\\\\d)1,2?$");
    

追问

那些多余的什么意思,乱七八槽的,我的问题不用区别AM、PM的,能给简单点儿吗

追答

你把注释部分删掉就行。

格式为“yyyy-mm-dd HH:mm:ss”的 Java 字符串到日期对象

【中文标题】格式为“yyyy-mm-dd HH:mm:ss”的 Java 字符串到日期对象【英文标题】:Java String to Date object of the format "yyyy-mm-dd HH:mm:ss" 【发布时间】:2012-12-04 20:42:10 【问题描述】:

我需要将包含日期的字符串转换为日期对象。字符串的格式为“yyyy-mm-dd HH:mm:ss.SSSSSS”,我希望在日期对象中使用相同的格式。

例如,我有一个字符串“2012-07-10 14:58:00.000000”,我需要生成的日期对象具有相同的格式。

我尝试了以下方法,但结果与预期不符。

java.util.Date temp = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000");

DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
                Date thisDate = dateFormat.parse("2012-07-10 14:58:00.000000");

结果是“2012 年 1 月 10 日星期二 14:58:00 EST 2012”。请让我知道我哪里出错了。

谢谢, Yeshwanth Kota

【问题讨论】:

仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 和 Java 中内置的 java.time 类所取代9. 见Tutorial by Oracle。 @Yeshwanth,原因是您没有应用日期格式化程序 【参考方案1】:
java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000");

mm 是您想要的分钟数 MM

代码

public class Test 

    public static void main(String[] args) throws ParseException 
        java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS")
                .parse("2012-07-10 14:58:00.000000");
        System.out.println(temp);
    

打印:

2012 年 7 月 10 日星期二 14:58:00 EDT

【讨论】:

当我使用 java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS" 解析日期“2021-03-02 17:30:41.624862”时).parse("2021-03-02 17:30:41.624862");我得到的输出是 Tue Mar 02 17:41:05 IST 2021,这是错的吗?正确的?大约提前11分钟。为什么会这样【参考方案2】:

供将来参考:

 yyyy => 4 digit year
 MM   => 2 digit month (you must type MM in ALL CAPS)
 dd   => 2 digit "day of the month"

 HH   => 2-digit "hour in day" (0 to 23)
 mm   => 2-digit minute (you must type mm in lowercase)
 ss   => 2-digit seconds
 SSS  => milliseconds

所以“yyyy-MM-dd HH:mm:ss”返回“2018-01-05 09:49:32”

但是“MMM dd, yyyy hh:mm a”返回“Jan 05, 2018 09:49 am”

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 的所谓示例仅显示输出。他们不会告诉你使用什么格式!

【讨论】:

仅供参考,麻烦的 SimpleDateFormat 类已被 Java 8 和 9 中内置的 java.time 类淘汰多年。具体来说,DateTimeFormatter。应避免使用与 Java 最早版本捆绑的旧日期时间类。【参考方案3】:

tl;博士

LocalDateTime.parse( 
    "2012-07-10 14:58:00.000000".replace( " " , "T" )  
)

微秒不适合

您正试图将具有微秒(六位十进制数字)的值压缩为仅支持毫秒分辨率(三位十进制数字)的数据类型。这是不可能的。

改为使用分辨率足够高的数据类型。 java.time 类使用纳秒分辨率(九个十进制数字)。

未分区的输入不适合分区类型

您试图将缺少任何与 UTC 或时区的偏移量的值放入仅表示 UTC 值的数据类型 (Date)。因此,您正在添加输入不打算添加的信息(UTC 偏移量)。

改为使用适当的数据类型。具体来说,java.time.LocalDateTime

区分大小写

其他答案和评论正确解释了格式化模式代码区分大小写。所以MMmm有不同的效果。

避免遗留类

与最早的 Java 版本捆绑在一起的麻烦的旧日期时间类现在已被遗留,被 Java 8 及更高版本中内置的 java.time 类所取代。

ISO 8601

您的输入字符串几乎符合 ISO 8601 标准格式。将中间的空格替换为T 以完全符合要求。

java.time 类在解析/生成字符串时默认使用标准格式。所以不需要指定格式模式。

日期时间对象没有“格式”

我需要生成的日期对象具有相同的格式。

不,日期时间对象没有“格式”。不要将日期时间对象与单纯的字符串混为一谈。字符串是对象的输入和输出。对象维护自己的日期时间信息的内部表示,其细节与调用程序员无关。

java.time

您的输入缺少任何与 UTC 偏移或麻烦的 me 区域的指标。因此,我们将其解析为缺少这些概念的 LocalDateTime 对象。

String input = "2012-07-10 14:58:00.000000".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

生成字符串

要生成代表LocalDateTime 值的字符串:

调用 toString 以获取标准 ISO 8601 格式的字符串。 使用DateTimeFormatter 生成自定义格式或自动本地化格式的字符串。

搜索 Stack Overflow 以获取更多信息,因为这些主题已被多次讨论。

ZonedDateTime

LocalDateTime 确实代表时间线上的确切点。

要确定实际时刻,请指定时区。例如,印度加尔各答的中午比法国巴黎的中午要早得多。没有时区的中午可能发生在大约 26-27 小时范围内的任何时间点。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。 Hibernate 5 & JPA 2.2 支持 java.time

从哪里获取 java.time 类?

Java SE 8Java SE 9Java SE 10Java SE 11 和更高版本 - 具有捆绑实现的标准 Java API 的一部分。 Java 9 带来了一些小功能和修复。 Java SE 6Java SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android java.time 类的更高版本的 Android (26+) 捆绑实现。 对于早期的 Android (API desugaring 的进程带来了最初未内置于 Android 中的subset of the java.time 功能。 如果脱糖不能满足您的需求,ThreeTenABP 项目会将ThreeTen-Backport(如上所述)适配到 Android。见How to use ThreeTenABP…

【讨论】:

【参考方案4】:

您没有应用日期格式化程序。相反,您只是在解析日期。以这种格式获得输出

yyyy-MM-dd HH:mm:ss.SSSSSS

我们必须使用 format() 方法,这里是完整的例子:- 这是完整的示例:- 它将采用这种格式的日期yyyy-MM-dd HH:mm:ss.SSSSSS 结果我们将得到与此格式相同的输出yyyy-MM-dd HH:mm:ss.SSSSSS

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//TODO OutPut should LIKE in this format yyyy-MM-dd HH:mm:ss.SSSSSS.
public class TestDateExample 

public static void main(String args[]) throws ParseException 

    SimpleDateFormat changeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");

    java.util.Date temp = changeFormat.parse("2012-07-10 14:58:00.000000");
     Date thisDate = changeFormat.parse("2012-07-10 14:58:00.000000");  
    System.out.println(thisDate);
    System.out.println("----------------------------"); 
    System.out.println("After applying formating :");
    String strDateOutput = changeFormat.format(temp);
    System.out.println(strDateOutput);




【讨论】:

【参考方案5】:

它对我有用 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.format(新日期));

【讨论】:

以上是关于Java中验证时间格式:格式:yyyy-mm-dd hh:mi(精确到分钟),例如2013-01-01 12:10,速求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用剑道验证器验证日期格式为 yyyy-MM-dd?

js验证年月日(yyyy-mm-dd)格式

java中yyyyMMddHHmmss时间格式怎么转化为yyyy-MM-dd HH:mm:ss?

java中yyyyMMddHHmmss时间格式怎么转化为yyyy-MM-dd HH:mm:ss

java如何实现各国时间格式转换成yyyy-MM-dd HH:mm:ss时间格式?

java中如何把获取到的当前时间转化成YYYY-MM-DD格式Date型