【问题标题】:Calendar date to yyyy-MM-dd format in javajava中的日历日期为yyyy-MM-dd格式
【发布时间】:2012-09-16 13:25:57
【问题描述】:

如何将日历日期转换为yyyy-MM-dd 格式。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

这将产生inActiveDate = Wed Sep 26 00:00:00 IST 2012。但我需要的是2012-09-26。我的目的是使用 Hibernate 标准将此日期与我的数据库中的另一个日期进行比较。所以我需要yyyy-MM-dd格式的日期对象。

【问题讨论】:

  • 您的代码令人困惑。您是否尝试将Date 格式化为yyyy-MM-dd 或将字符串从yyyy-MM-dd 解析为Date 值?要格式化日期,只需使用format1.format(date),要解析它,使用format1.parse(someStringValueInTheCorrectFormat)
  • 我已经编辑了我的问题..抱歉之前的错误..
  • 一个班轮:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
  • @IwanAucamp:你在 every 调用上创建一个 new 实例——这是浪费的,因为格式化程序可以是一个常量并且只能被创建一次(假设您不需要线程安全,因为 SDF 不是线程安全的)。

标签: java date calendar converter


【解决方案1】:
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }

【讨论】:

    【解决方案2】:

    Java Date 是自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数的容器。

    当您使用System.out.println(date) 之类的内容时,Java 使用Date.toString() 来打印内容。

    更改它的唯一方法是覆盖Date 并提供您自己的Date.toString() 实现。现在在你启动你的 IDE 并尝试这个之前,我不会;它只会使事情复杂化。您最好将日期格式化为您想要使用(或显示)的格式。

    Java 8+

    LocalDateTime ldt = LocalDateTime.now().plusDays(1);
    DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
    System.out.println(ldt);
    // Output "2018-05-12T17:21:53.658"
    
    String formatter = formmat1.format(ldt);
    System.out.println(formatter);
    // 2018-05-12
    

    Java 8 之前的版本

    您应该使用ThreeTen Backport

    出于历史目的保留以下内容(作为原始答案)

    你可以做的是格式化日期。

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, 1);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(cal.getTime());
    // Output "Wed Sep 26 14:23:28 EST 2012"
    
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
    // Output "2012-09-26"
    
    System.out.println(format1.parse(formatted));
    // Output "Wed Sep 26 00:00:00 EST 2012"
    

    这些实际上是相同的日期,表示方式不同。

    【讨论】:

    • 有点,但使用Calendar 会更容易
    • 无论如何要从此日历对象中完全删除时区?
    • 如果您对日期/时间操作非常认真,请查看Joda Time,这比搞砸Calendar 容易得多
    • @n13 如果问题是关于数据库日期操作甚至时间操作,我可能会同意你的看法。问题是如何以特定日期格式表示日期值
    • 结构良好的答案 - 这基本上是模型(日期)-视图(格式)分离。
    【解决方案3】:
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month, date);
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
        String formatted = format1.format(cal.getTime());
        System.out.println(formatted);
    }
    

    【讨论】:

    【解决方案4】:

    java.time

    answer by MadProgrammer 是正确的,尤其是关于Joda-Time 的提示。 Joda-Time 的继任者现在作为新的 java.time package 内置到 Java 8 中。这是 Java 8 中的示例代码。

    当使用日期时间(而不是本地日期)时,time zone 很重要。日期取决于时区。例如,India time zone+05:30(比 UTC 提前五个半小时),而 France 只提前一个小时。因此,印度新一天的某个时刻有一个日期,而法国的同一时刻有“昨天”的日期。创建缺少任何时区或偏移信息的字符串输出会造成歧义。你要求 YYYY-MM-DD 输出,所以我提供了,但我不推荐它。而不是ISO_LOCAL_DATE,我会使用ISO_DATE 来获得这个输出:2014-02-25+05:30

    ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
    ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );
    
    DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
    String output = formatterOutput.format( zonedDateTime );
    

    转储到控制台...

    System.out.println( "zonedDateTime: " + zonedDateTime );
    System.out.println( "output: " + output );
    

    运行时……

    zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
    output: 2014-02-25
    

    乔达时间

    使用Joda-Time 库的类似代码,java.time 的前身。

    DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
    DateTime dateTime = DateTime.now( zone );
    DateTimeFormatter formatter = ISODateTimeFormat.date();
    String output = formatter.print( dateTime );
    

    ISO 8601

    顺便说一句,输入字符串的格式是标准格式,是ISO 8601 定义的几种方便的日期时间字符串格式之一。

    在解析和生成各种日期时间值的字符串表示时,默认情况下 Joda-Time 和 java.time 都使用 ISO 8601 格式。

    【讨论】:

      【解决方案5】:

      我找到了这段代码,其中日期以一种格式与数据库中的日期字段进行比较...可能对您有帮助...

      当你使用 simpledateformat 将字符串转换为日期时,很难与 mysql 数据库中的 Date 字段进行比较。

      所以使用 select STR_to_DATE('yourdate','%m/%d/%Y') --> 以这种格式转换java字符串日期格式,然后你将得到mysql日期字段的确切日期格式.

      http://javainfinite.com/java/java-convert-string-to-date-and-compare/

      【讨论】:

      • 由于链接腐烂和其他问题,不鼓励在 StackOverflow 上仅链接答案。能否总结一下信息的要点?
      【解决方案6】:
      Calendar cal = Calendar.getInstance();
      cal.add(Calendar.DATE, 7);
      Date date = c.getTime();
      SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
      JOptionPane.showMessageDialog(null, ft.format(date));
      

      这将在 JOption 窗口窗格中以月、日和年格式显示您的日期 + 7 天。

      【讨论】:

        【解决方案7】:

        您的代码错误。没有必要解析日期并将其保留为 Date 对象。

        您可以在想要显示时格式化日历日期对象并将其保留为字符串。

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, 1);
        Date date = cal.getTime();             
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
        String inActiveDate = null;
        try {
            inActiveDate = format1.format(date);
            System.out.println(inActiveDate );
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        

        【讨论】:

          【解决方案8】:

          为了解析java.util.Date 对象,您必须先使用您自己的格式将其转换为字符串。

          inActiveDate = format1.parse(  format1.format(date)  );
          

          但我相信你在这里是多余的。

          【讨论】:

            【解决方案9】:

            java.util.Date 对象不能以 custom 格式表示 date,您必须使用返回 stringSimpleDateFormat.format 方法。

            String myString=format1.format(date);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-01-02
              • 1970-01-01
              • 2015-09-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多