当前位置: 首页 > 面试题库 >

用Java解析YYYYMMdd日期的最快方法

淳于泓
2023-03-14
问题内容

在这里很难说出要问什么。这个问题是模棱两可的,模糊的,不完整的,过于宽泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开,
请访问帮助中心。

8年前关闭。

解析YYYYMMdd日期(例如2012年4月5日的20120405)时,最快的方法是什么?

int year = Integer.parseInt(dateString.substring(0, 4));
int month = Integer.parseInt(dateString.substring(4, 6));
int day = Integer.parseInt(dateString.substring(6));

int date = Integer.parseInt(dateString)
year = date / 10000;
month = (date % 10000) / 100; 
day = date % 100;

月的mod 10000将是因为mod 10000导致MMdd且结果/ 100为MM

在第一个示例中,我们执行3个String运算和3个“ parse to int”,在第二个示例中,我们通过模运算完成了许多事情。

什么更快?有没有更快的方法


问题答案:

如下所示,仅当您查看 数百万 次迭代时,日期处理的性能才有意义。相反,您应该选择易于阅读和维护的解决方案。

尽管可以使用SimpleDateFormat,它不是可重入的,因此应避免使用。最好的解决方案是使用出色的Joda时间类:

private static final DateTimeFormatter DATE_FORMATTER = new DateTimeFormatterBuilder()
     .appendYear(4,4).appendMonthOfYear(2).appendDayOfMonth(2).toFormatter();
...
Date date = DATE_FORMATTER.parseDateTime(dateOfBirth).toDate();

如果我们在谈论您的数学函数,那么首先要指出的是,我已修复了您的数学代码中的错误。 那就是
手工做的问题。就是说,一次处理字符串的将是最快的。快速测试运行显示:

year = Integer.parseInt(dateString.substring(0, 4));
month = Integer.parseInt(dateString.substring(4, 6));
day = Integer.parseInt(dateString.substring(6));

大约需要800毫秒的时间:

int date = Integer.parseInt(dateString);
year = date / 10000;
month = (date % 10000) / 100; 
day = date % 100;
total += year + month + day;

大约需要400毫秒。

但是……再次…… 您需要考虑到这是经过 一千万
迭代之后的结果。这是过早优化的完美示例。我会选择最易读,最容易维护的工具。这就是为什么乔达时间答案是最好的。



 类似资料:
  • 问题内容: 我的日期格式为dd-mmm-yy或d- mmm-y,其中月份是字母的缩写(例如,09年11月4日或05年12月12日等)。喜欢解析它以产生一个java.util.Date对象。 可以通过利用java.text.DateFormat类来实现吗?还是有另一种简单的方法? 问题答案: 您可能需要使用SimpleDateFormat来解析自定义格式。此文章解释格式的细节。

  • 这是一个很难回答的问题: 如何在没有外部库的情况下解析< code >“YYYYmmdd”格式的日期?如果输入字符串不是这种格式,我希望得到< code>invalid Date(或者undefined,如果这样更简单的话)。

  • 问题内容: 我正在尝试解析一个日期,但是奇怪的是我遇到了一个例外。 这是代码: 例外是: 我已经阅读了文档,我认为我的模式是正确的。所以我不明白… 问题答案: 这可能是因为你计算机上的默认语言环境不是英语。 你应该使用: 代替。

  • 我有一个带皮秒的字符串日期(在句点后的9到12位数之间),当我试图用解析日期时: 它抛出一个异常,说我不能创建一个超过9位数的格式。 是否有另一个类可以解析日期,或者有不同的解析方法。 任何解决方案都会对我有所帮助,但我更喜欢使用

  • 问题内容: 我的日期格式为“ yyyy-MM-dd’T’HH:mm:ss.sssZ”。例如,日期为“ 2018-07-17T09:59:51.312Z”。我正在使用下面的代码来解析Java中的String。 这给了我“无法解析的日期:”例外。谁能告诉我该怎么做? 问题答案: 您忘了在 那会做的工作

  • 问题内容: 我正在尝试解析此日期,但无法正常工作: 如果我使用strDate =尝试此代码,我将获得肯定的答案。有什么问题?如何解析这种格式? PS。我从那里得到了这个日期,并且没有关于用户选择日期时如何修改日期格式的说明。 问题答案: 你不能期望使用设置为其他格式的SimpleDateFormat解析日期。 要解析“ 2009年Thu Jun 18 20:56:02 EDT 2019”日期字符串