【问题标题】:java create date object using a value stringjava使用值字符串创建日期对象
【发布时间】:2013-04-25 06:45:41
【问题描述】:

我正在使用它来获取当前时间:

java.util.Calendar cal = java.util.Calendar.getInstance();
    System.out.println(new java.text.SimpleDateFormat("EEEE, dd/MM/yyyy/hh:mm:ss")
            .format(cal.getTime()));

我想将值(我打印它)放入日期对象中,我尝试了这个:

Date currentDate = new Date(value);

但是eclipse告诉我这个功能不好。

编辑 value 是我使用 system.out.println 打印给您的值

【问题讨论】:

  • Dinatsoil 什么是价值。请明确说明。
  • value你用什么?
  • valueString?您还必须使用 SimpleDateFormat 解析它。
  • hh 是十二小时格式,HH 是二十四小时格式。没有 AM/PM 可能 HH
  • 你的程序也在MyEclipse上运行没有任何问题。那么你真正需要的。

标签: java date


【解决方案1】:

使用 SimpleDateFormat 解析方法:

import java.text.DateFormat;
import java.text.SimpleDateFormat;

String inputString = "11-11-2012";
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date inputDate = dateFormat.parse(inputString, dateFormat );

由于我们有带有 LocalDate 的 Java 8,我建议使用下一个:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

String inputString = "11-11-2012";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate inputDate = LocalDate.parse(inputString,formatter);

【讨论】:

  • @bharal java.util.Date 是旧 java 的遗留物。现在是时候使用 LocalDate
  • 最后一行缺少fromatter:可能是跟随LocalDate inputDate = LocalDate.parse(inputString, formatter);
【解决方案2】:

当您想将字符串转换为日期对象时,请使用SimpleDateFormat#parse
尝试使用

String dateInString = new java.text.SimpleDateFormat("EEEE, dd/MM/yyyy/hh:mm:ss")
        .format(cal.getTime())
SimpleDateFormat formatter = new SimpleDateFormat("EEEE, dd/MM/yyyy/hh:mm:ss");
Date parsedDate = formatter.parse(dateInString);

.另外的事情是如果你想将Date 转换为String 那么你应该使用SimpleDateFormat#format 函数。
现在你的重点是 new Date(String) 已弃用,现在不推荐使用。现在每当有人要解析时,他/她都应该使用SimpleDateFormat#parse

有关 SimpleDateFormat 选项中使用的更多日期和时间模式,请参阅 official doc

【讨论】:

  • 这是你的字符串格式的日期。你需要在new SimpleDateFormat(format) 中设置格式,就像你的字符串一样,然后只需要解析它。因为你的new java.text.SimpleDateFormat("EEEE, dd/MM/yyyy/hh:mm:ss") .format(cald.getTime()) 将返回一个字符串并在问题我猜你想把它转换成Date那么这就是我回答的方式
  • dateInString 是什么?我没有解析任何东西,
  • +1 dateInString 是您想要转换为日期的字符串。
  • @MarcoDinatsoli 请查看更新后的答案。我希望现在您能理解什么是dateInString
  • 你的代码的结果是Thu Apr 25 00:23:26 PDT 2013,它不是我想要的格式,为什么?
【解决方案3】:

这是使用 SimpleDateFormat parse() 方法的优化解决方案。

SimpleDateFormat formatter = new SimpleDateFormat(
        "EEEE, dd/MM/yyyy/hh:mm:ss");
String strDate = formatter.format(new Date());

try {
    Date pDate = formatter.parse(strDate);
} catch (ParseException e) { // note: parse method can throw ParseException
    e.printStackTrace();
}

注意事项

  • 我们不需要创建日历实例来获取当前日期 & 时间改为使用new Date()
  • 此外,它不需要SimpleDateFormat 的 2 个实例 在这个问题的投票最多的答案中找到。这只是一个 浪费内存
  • 此外,当我们知道parse 方法只有机会抛出ParseException 时,捕获像Exception 这样的通用异常是一种不好的做法。在处理异常时,我们需要尽可能具体。你可以参考,throws Exception bad practice?

【讨论】:

    【解决方案4】:
     import java.util.Date;
     import java.text.SimpleDateFormat;
    

    上面是导入方法,下面是Date的简单代码

     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     Date date = new Date();
    
     system.out.println((dateFormat.format(date))); 
    

    【讨论】:

      【解决方案5】:

      试试这个:-

      try{
              String valuee="25/04/2013";
              Date currentDate =new SimpleDateFormat("dd/MM/yyyy").parse(valuee);
              System.out.println("Date is ::"+currentDate);
              }catch(Exception e){
                  System.out.println("Error::"+e);
                  e.printStackTrace();
              }
      

      输出:-

         Date is ::Thu Apr 25 00:00:00 GMT+05:30 2013
      

      你的值应该是正确的格式。

      在您的问题中,您还要求以下内容:-

         Date currentDate = new Date(value);
      

      这种风格的日期构造器已经被弃用了。所以,它不再使用了。我们知道日期有6个构造器。Read more

      【讨论】:

        【解决方案6】:

        首先要知道 ECLIPSE 这样做的原因。

        Date 只有一个构造函数Date(long date),它要求长数据类型的日期。

        你正在使用的构造函数

        日期(字符串) 已弃用。从 JDK 1.1 版开始,由 DateFormat.parse(String s) 取代。

        所以eclipse说这个功能不好。

        查看这个官方文档

        http://docs.oracle.com/javase/6/docs/api/java/util/Date.html


        您的上下文中已弃用的方法 -- 来源 -- http://www.coderanch.com/t/378728/java/java/Deprecated-methods

        方法或类可能被弃用的原因有很多。如果不破坏向后兼容性,API 可能不容易扩展,因此会被更强大的 API 取代(例如,java.util.Date 已被弃用,取而代之的是 Calendar 或 Java 1.0 事件模型)。在某些情况下,它也可能根本不起作用或产生不正确的结果(例如,某些 java.io 流类在某些编码下不能正常工作)。有时一个 API 只是构思不当(servlet API 中的 SingleThreadModel),然后什么都没有。并且一些早期的调用已经被“Java Bean”兼容的方法所取代(getSize 的大小,getBounds 的边界等)


        有几个解决方案,只要用谷歌搜索一下--

        您可以通过将日期字符串转换为长毫秒来使用日期(长日期),并且stackoverflow为此目的有很多帖子。

        converting a date string into milliseconds in java

        【讨论】:

          【解决方案7】:

          是因为value来了String(Java Date object constructor for getting string is deprecated)

          Date(String) 已弃用。

          查看jodatime 或者您可以将@SuppressWarnings({“deprecation”}) 放在调用Date(String) 构造函数的方法之外。

          【讨论】:

            【解决方案8】:

            你基本上想要做的是:-

            Calendar cal = Calendar.getInstance();
            Date date = cal.getTime();
            

            原因是,您正在打印的 String 只是您所需格式的 DateString 表示。如果您尝试将其转换为日期,您最终会执行我上面提到的操作。

            Date(cal.getTime()) 格式化为String 并尝试从中取回Date - 毫无意义。 Date 没有这样的格式。您只能使用 SDF 获得 String 的表示形式。

            【讨论】:

              【解决方案9】:

              试试这个,它对我有用。

               String inputString = "01-01-1900";
                  Date inputDate= null;
                  try {
                      inputDate = new SimpleDateFormat("dd-MM-yyyy").parse(inputString);
                  } catch (ParseException e) {
                      e.printStackTrace();
                  }
              
                  dp.getDatePicker().setMinDate(inputDate.getTime());
              

              【讨论】:

                猜你喜欢
                • 2023-03-18
                • 2010-09-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-11-22
                • 1970-01-01
                • 1970-01-01
                • 2021-11-07
                相关资源
                最近更新 更多