【问题标题】:Convert locale date string to timestamp. Java / Android将语言环境日期字符串转换为时间戳。爪哇/安卓
【发布时间】:2014-03-30 03:31:33
【问题描述】:

目前我正在使用以下代码根据用户的语言环境创建日期时间字符串。

Calendar todayC = Calendar.getInstance() ;
Date today = todayC.getTime();
return today.toLocaleString();

这将返回以下格式的字符串(每个语言环境不同):

  • 美国:(en_US) 返回:2014 年 2 月 26 日晚上 10:27:53
  • 德国 (de_DE) 返回:26.02.2014 22:28:57
  • 法国 (fr_FR) 返回:26 fèvr。 2014 22:30:27
  • 挪威(Nb_NO) 返回:26。 2014年2月22:25:54 ……等等

我已将这些字符串保存在数据库中,现在需要按日期对数据库进行排序。 基于这些刺的排序可能并不容易,所以我的问题是:

如何将这些字符串转换为时间戳?

【问题讨论】:

  • 您想要以什么格式获取时间戳?
  • 我建议永远不要在数据库中存储“用户友好的”特定于区域设置的日期字符串。使用 ISO8601 使用的 long 值或 big-endian 形式,如 Dayan Gonzalez 答案中的两个示例所示。
  • Drewness:我认为 unix 时间戳会是一个不错的选择。
  • Squonk:是的,我同意。很难学到这一点。

标签: java android date time timestamp


【解决方案1】:

您可以将日期值转换为更易于排序的long 值:

Calendar todayC = Calendar.getInstance() ;
Date today = todayC.getTime();
long longValue = today.getTime();
return longValue;

您可以直接返回long值,也可以将日期值转换为特定格式返回String值:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar todayC = Calendar.getInstance() ;
Date today = todayC.getTime();
String stringValue = sdf.format(today);
return stringValue;

希望有用。

【讨论】:

  • 这很有帮助,但我需要转换已经保存在数据库中的字符串。正如您在我的第一篇文章中看到的那样,这些字符串对于每个语言环境都是不同的。由于字符串没有一种特定的格式,例如(“yyyy/MM/dd HH:mm:ss”)我无法找到如何将它们解析回日期对象。
【解决方案2】:

您应该将日期的long 值(自纪元以来的毫秒数)存储在数据库中,并按这些值排序。当您实际需要向用户显示日期值时,请使用 long 值创建一个日期对象并按照您想要的方式对其进行格式化。数据库旨在存储数据,而不是标签。

【讨论】:

    【解决方案3】:

    如果可能的话,我可能会将时间戳作为日期保存在您的数据库中,并在您想要显示它时使用区域设置。 它会更加一致,日期也会更容易处理。

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 2011-03-16
      • 2016-09-15
      相关资源
      最近更新 更多