【问题标题】:format sql datetime in java android studio在 java android studio 中格式化 sql 日期时间
【发布时间】:2019-07-16 04:26:47
【问题描述】:

如何使用 java 在 android studio 中将此 DateTime 表单 SQL 2019-02-18T06:30:38.9933333 格式化为 2/18/19 上午 6:30

我已经尝试过 Simpledatetime 没有任何反应。`

String startDate="2019-02-18T06:30:38.9933333"; // Input String
        SimpleDateFormat sdf1 = new SimpleDateFormat("MM-dd-yyyy h:mm tt"); 

        java.util.Date date = sdf1.parse(startDate); 
        java.sql.Date sqlStartDate = new java.sql.Date(date.getTime());

需要帮助..谢谢。

【问题讨论】:

  • 顺便考虑一下扔掉早已过时且臭名昭著的麻烦SimpleDateFormat和两个Date类,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代的Java 日期和时间 API。使用起来感觉好多了。
  • 什么都没有发生几乎不是真的。在我的 Java 10 上,我得到了 java.lang.IllegalArgumentException: Illegal pattern character 't'。如果您没有看到它,那么您的项目设置似乎存在严重问题。请先解决问题,然后报告您遇到的问题,以便我们知道应该尽力帮助您的事情。
  • 不要从 SQL 获取日期时间作为字符串。如果您的 API 级别和 JDBC 驱动程序还不允许您获取 LocalDateTime,请获取 Timestamp 并考虑转换为 LocalDateTime 进行格式化。
  • 输入字符串不是 SQL 格式,它是标准的ISO 8601 格式。 SQL 格式类似,但中间没有T

标签: java android datetime datetime-format


【解决方案1】:

java.time、ThreeTenABP 和内置的本地化格式

    DateTimeFormatter formatter
            = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
                    .withLocale(Locale.US);

    String startDate = "2019-02-18T06:30:38.9933333"; // Input String
    LocalDateTime dateTime = LocalDateTime.parse(startDate);
    System.out.println(dateTime.format(formatter));

输出:

2/18/19 上午 6:30

仍然比上述更好,从您的数据库中获取一个LocalDateTime,或者如果这还不可能,那么您可以像这样转换一个Timestamp

    LocalDateTime dateTime = DateTimeUtils.toLocalDateTime(timestampFromDatabase);

或者如果使用 Java 8 或更高版本:

    LocalDateTime dateTime = timestampFromDatabase.toLocalDateTime();

格式和以前一样。

通常,Java 比您更了解特定受众的最佳格式。使用内置格式还可以使您免于编写格式模式字符串的容易出错的任务。

在第一个 sn-p 中,我利用了您的输入字符串符合 ISO 8601 的事实,这是 java.time 类解析(并打印)为其默认值的国际标准格式,也就是说,没有任何显式格式化程序.

SimpleDateFormatjava.util.Datejava.sql.Date 类都设计得很差,而且早已过时。相反,我使用 java.time,现代 Java 日期和时间 API。

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 起)中,现代 API 是内置的。
  • 在 Java 6 和 7 中获得 ThreeTen Backport,这是现代类的后向端口(JSR 310 的 ThreeTen;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

  • 非常感谢您提供的信息丰富的回答。上帝保佑
【解决方案2】:

如果您使用的是 java8 或更高版本,也许您正在使用 java.time.LocalDateTime

String startDate = "2019-02-18T06:30:38.9933333"; // Input String
LocalDateTime localDateTime = LocalDateTime.parse(startDate);

【讨论】:

    【解决方案3】:

    使用格式:

    yyyy-MM-dd'T'HH:mm:ss.SSSSSSS
    

    更多参考: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2014-01-19
      相关资源
      最近更新 更多