【问题标题】:How to get Current Date into String Format in Java? [duplicate]如何在 Java 中将当前日期转换为字符串格式? [复制]
【发布时间】:2021-09-25 06:36:15
【问题描述】:

我正在尝试获取考勤系统当前日期的二维码。我将值设置为 TextView。 我正在做这样的事情..

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.mm.yyyy");
Date date = new Date();
String data = simpleDateFormat.format(date);
textView.setText(data);

我应该得到类似 25.09.2021

相反,我得到了 java.text.SimpleDateFormat@44aa2260

我做错了什么?

【问题讨论】:

  • 不,对我来说很好,一定是你在做的其他事情。哦,mm 是“分钟”。现在请注意,您应该做的更像是DateTimeFormatter.ofPattern("dd.MM.yyyy").format(LocalDate.now())
  • 您的实际代码是textView.setText(simpleDateFormat); - 我怎么知道?因为你通过调用simpleDateFormat.toString()得到java.text.SimpleDateFormat@44aa2260
  • 感谢@MadProgrammer 的建议。我会记住这一点的。
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateDateTimeFormatter

标签: java date simpledateformat


【解决方案1】:

tl;博士

    LocalDate
    .now(
        ZoneId.of( "Africa/Tunis" )
    )
    .format(
        DateTimeFormatter.ofPattern( "dd.MM.uuuu" )
    )

自动定位:

LocalDate.now().format( DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ) )

或者:

LocalDate
.now( ZoneId.of( "Asia/Kolkata" ) )
.format( 
    DateTimeFormatter
    .ofLocalizedDate( FormatStyle.SHORT )
    .withLocale( 
        new Locale( "hi" , "IN" ) 
    ) 
)

SimpleDateFormat#toString

作为commented by Frisch,您的实际代码与您在问题中显示的不同。我们知道,因为像java.text.SimpleDateFormat@44aa2260 这样的值是由SimpleDateFormat#toString 产生的,从Object#toString 继承了该方法实现。

所以你一定是打电话给textView.setText( simpleDateFormat );

另一个问题:您的格式模式不正确。代码区分大小写。所以mm 应该是MM

java.time

您正在使用糟糕的日期时间类,这些类现在已成为遗留问题,多年前已被 JSR 310 中定义的现代 java.time 类所取代。

我建议明确确定确定今天日期的时区,而不是隐式依赖 JVM 当前的默认时区。

ZoneId z = ZoneId.of( "America/Edmonton" ) ;  // Or `ZoneId.systemDefault()`. 
LocalDate today = LocalDate.now( z ) ;

指定您的格式化模式。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd.MM.uuuu" ) ;
String output = today.format( f ) ;

【讨论】:

    【解决方案2】:
    DateFormat simpleDateFormat = new SimpleDateFormat("dd.mm.yyyy");
    Date date = new Date();
    String data = simpleDateFormat.format(date);
    textView.setText(data);
    

    谢谢@rooster123

    【讨论】:

    • 格式不正确。
    【解决方案3】:
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class CurrentDateTimeExample2 {
    public static void main(String[] args) {
        SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
        Date date = new Date();
        System.out.println(formatter.format(date));
       }
    }
    

    引用自here

    【讨论】:

    • 该参考资料早已过时。请不要使用它。示例日期是从 2001 年到 2012 年(1818 年有一个),所以它可能是在 2001 年编写的,后来更新了,但不是在 2014 年现代 Java 日期和时间 API java.time 出现之后(七和半年前还在计数)。它需要从头开始完全重写。不幸的是,许多此类过时的教程仍然存在于 Internet 上。相反,您可以使用 the official Oracle tutorial
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 2012-01-31
    • 2013-09-14
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2013-10-04
    • 2016-07-04
    相关资源
    最近更新 更多