【问题标题】:How to convert a String to Date of format yyyy-MM-dd HH:MM:ss [duplicate]如何将字符串转换为格式为 yyyy-MM-dd HH:MM:ss 的日期 [重复]
【发布时间】:2019-07-26 17:12:47
【问题描述】:

我有一个像 "2015-07-16 17:07:21" 这样的字符串。我想将其转换为相同格式的日期。我尝试过这样的事情:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
Date date = sdf.parse("2015-07-16 17:07:21"); 

但输出格式不同,例如 Thu Jul 16 17:00:21 IST 2015。我怎样才能让它按我的需要工作。谁能帮我。我知道这可能是重复的,但我没有找到任何运气。

【问题讨论】:

  • 日期没有格式,它有一个代表时间点的值。如果你想以某种格式显示它,你应该使用 SimpleDateFormat
  • 我该怎么做。你能给我一个例子或一个链接来参考吗?
  • 当你希望它的格式不同时,用你需要的模式定义另一个 SimpleDateformat 并用它来格式化日期。需要明确的是:您有一个 SimpleDateformat 解析输入,一个用于打印输出。
  • 至少有两个答案已经说明了这一点,让我更明确地说:日期没有“格式”。日期是一个(大)整数,即自过去某个时间以来的毫秒数。 SimpleDateFormat 是将字符串从特定格式转换为日期(parse())或将日期转换为字符串(format())的一种(简单)方法。
  • 我建议你避免使用SimpleDateFormat 类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。

标签: java date simpledateformat


【解决方案1】:

来自 Java API https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

Date 类表示特定的时间瞬间,精度为毫秒。

尝试了解DateDateFormat的区别/联系。

public static void main(String [] args) throws ParseException{
    String dateString = "2015-07-16 17:07:21";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    // use SimpleDateFormat to define how to PARSE the INPUT
    Date date = sdf.parse(dateString);

    // at this point you have a Date-Object with the value of
    // 1437059241000 milliseconds
    // It doesn't have a format in the way you think

    // use SimpleDateFormat to define how to FORMAT the OUTPUT
    System.out.println( sdf.format(date) );

    sdf = new SimpleDateFormat();
    System.out.println( sdf.format(date) );

  // ....
}

输出:(请注意,日期保持不变,只是其表示(格式)发生了变化)

2015-07-16 17:07:21
7/16/15 5:07 PM

【讨论】:

  • new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 删除区域设置警告。
【解决方案2】:

尝试格式化字符串,如:yyyy-MM-dd HH:mm:ss

M:月,m:分钟

public static void main(String [] args){
    String dateString = "2015-07-16 17:07:21";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date;
    try {
        date = sdf.parse(dateString);
    } catch (ParseException e) {
        e.printStackTrace();
        return;
    } 
    System.out.println(sdf.format(date));
    System.out.println(dateString.equals(sdf.format(date)));
}

另外,日期没有格式,它有一个代表时间点的值。如果你想以某种格式显示它,你应该使用 SimpleDateFormat

【讨论】:

  • 我试过了。它不工作
  • sdf.format(date) 再次返回字符串。
【解决方案3】:

尝试使用这个:

    public static void main(String[] args) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String dateInString = "2015-07-16 17:07:21";
    try {

        Date date = formatter.parse(dateInString);

        System.out.println(date);
        System.out.println(formatter.format(date));

    } catch (ParseException e) {
        e.printStackTrace();
    }
}

输出:

Thu Jul 16 17:07:21 IST 2015
2015-07-16 17:07:21

注意: 有关完整的日期和时间模式,请参阅此http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

【讨论】:

    【解决方案4】:

    查看此代码:

    public static void main(String [] args){
        String dateString = "2015-07-16 17:07:21";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date;
        try {
            date = sdf.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
            return;
        } 
        System.out.println(date); // Displays date in it's default format Jul 16 17:00:21 IST 2015
        System.out.println(dateString.equals(date)); // Returns false since 'Jul 16 17:00:21 IST 2015' is not equal to dateString (2015-07-16 17:07:21)
    }
    

    Date 类总是以其默认格式存储日期。 SimpleDateFormat 有助于使用其对象格式化日期。它不会对日期类对象进行任何更改。相反,它将Date class 转换为User defined 格式,这对 Date 类对象没有任何影响。我想这很清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多