【问题标题】:Date formatting with java.text.DateFormat [duplicate]使用 java.text.DateFormat 格式化日期 [重复]
【发布时间】:2013-02-20 21:43:51
【问题描述】:

我不想承认这一点,但我无法理解基本的日期格式。我知道我只是想多了,但我看到的文档完全想念我。例如,我想要做的只是显示格式为 "Wednesday, February 20, 2013" 的当前日期。到目前为止我所拥有的是:

TextView textView = (TextView) findViewById(R.id.currentDate);
String now = DateFormat.getDateInstance().format(new Date());
textView.setText(now); 

这会产生类似 "2013-2-20" 的内容,这是很好的第一步,但不是我想要的。在查看文档时我很困惑,因为DateFormat 文档都说使用整数来表示SHORTMEDIUMLONGDEFAULT。什么?确切地说,我会把这个论点放在哪里?以及如何/哪个整数表示SHORT vs LONG?这些都没有任何意义,我觉得自己像个彻头彻尾的白痴,因为我知道这很明显。多年使用 PHP 的日期格式后,我开始意识到这一点,我确信我的旧习惯完全阻碍了我看到它的简单性。

【问题讨论】:

  • 看看这个关于格式化日期的博客javatechniques.com/blog/…
  • 您缺少的关键概念是日期格式的原始实现在 Java 中被严重破坏;原始实现的 Java 替代品被破坏得更加可怕;并且试图使原始损坏的实现可用的 Android 辅助实用程序在他们使用的 API 系列中不一致。如果你觉得这很困难,那是因为 Java 中的日期格式并不容易,或者永远不会容易。让你知道。
  • @Johnathan:这就是我完全困惑的地方。在您引用的博客中,我想我可能已经阅读过,我发现诸如“System.out.println(” 8.” + DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(now)) 之类的东西; 而我完全被“8”所迷惑。
  • @Robin:这让我感觉好多了,尽管我必须承认,今天的问题只是我没有像一只塞满生锈门把手的袜子那样的智力。
  • 我下面的回答可以接受吗?如果是这样,请接受作为答案。如果没有,请告诉我我可以做些什么来为您澄清或改进它。

标签: java android date-format


【解决方案1】:

您可以将属性(SHORT、LONG 等)放入 DateFormat.getDateInstance(); 中,如下所示:

DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);

SHORT 完全是数字,例如 12.13.52 或 3:30pm

MEDIUM 较长,例如 1952 年 1 月 12 日

LONG 更长,例如 1952 年 1 月 12 日或下午 3:30:32

FULL 非常完整,例如公元 1952 年 4 月 12 日星期二或太平洋标准时间下午 3:30:42。

此信息可以在here找到。

【讨论】:

  • 谢谢你,大卫。我向上帝发誓,我今天至少读了那页八次,但没有看到。我要睡大约 2 个小时,与流感作斗争。感谢您花时间指出这一点。
  • 好的,所以这仍然没有什么意义。我现在将原来的更改为 String = DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date());它完全没有效果。返回的字符串与之前完全相同。我在这里错过了什么?
  • 我不确定;我写了一个简短的 Java 程序,我开始工作了;我会发布它。
  • '导入 java.util.Date;导入 java.text.DateFormat;公共类测试 { public static void main(String args[]) { String now = DateFormat.getDateInstance(DateFormat.SHORT).format(new Date()); System.out.println("SHORT:" + now);现在 = DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date()); System.out.println("中等:" + now);现在 = DateFormat.getDateInstance(DateFormat.LONG).format(new Date()); System.out.println("LONG:" + now);现在 = DateFormat.getDateInstance(DateFormat.FULL).format(new Date()); System.out.println("FULL:" + now); } }'
  • 结果是:SHORT:2/21/13 MEDIUM:2013 年 2 月 21 日 LONG:2013 年 2 月 21 日 FULL:2013 年 2 月 21 日,星期四
【解决方案2】:

如果您习惯于传统语言,那么您缺少的关键概念是 Java 中的日期/时间处理被严重破坏。不只是一次,而是两次,在破碎的两个不同的化身中。加上一些事后创可贴助手类,例如 DateUtils。您需要接受的关键见解是:在 Java 中与日期和时间无关是非常简单的。

尝试改用 SimpleDateFormat。不,它实际上并不简单。但是默认设置会产生一个可行的本地化日期/时间(如果不是一个漂亮的日期/时间)。

    DateFormat format = SimpleDateFormat.getDateTimeInstance(),

while 生成:“Dec 31, 1969 4:00:00 PM”(或本地化等效项)。

【讨论】:

  • 我开始相信你了。但是,我真的只是在寻找一个简单的“1854 年 3 月 6 日,星期二”之类的。这在 Php 或 Python 等语言中非常简单。
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 2019-09-27
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 2016-10-15
相关资源
最近更新 更多