将字符串日期格式化为 Java 中的不同格式

Formatting a String date into a different format in Java

我正在尝试格式化一个 JSON,它有一个 date 键,格式为:

date: "2017-05-23T06:25:50"

我目前的尝试如下:

private String formatDate(String date) {
  SimpleDateFormat format = new SimpleDateFormat("MM/DD/yyyy");
  String formattedDate = "";

  try {
    formattedDate = format.format(format.parse(String.valueOf(date)));
  } catch (ParseException e) {
    e.printStackTrace();
  }

  return formattedDate;
}

但在这种情况下,结果没有显示在我的应用程序中,TextView 是不可见的,我无法记录任何内容。

我真的尝试过其他解决方案,但对我来说没有成功。不知道是不是因为传入的值是字符串。

使用此代码格式化您的“2017-05-23T06:25:50”

String strDate = "2017-05-23T06:25:50";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date convertedDate = new Date();
try {
    convertedDate = dateFormat.parse(strDate);
    SimpleDateFormat sdfnewformat = new SimpleDateFormat("MMM dd yyyy");
    String finalDateString = sdfnewformat.format(convertedDate);
} catch (ParseException e) {
    e.printStackTrace();
}

转换后的finalDateString设置为您的textView

使用此功能:

 private String convertDate(String dt) {

            //String date="2017-05-23T06:25:50";

            try {
                SimpleDateFormat spf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); //date format in which your current string is
                Date newDate = null;
                newDate = spf.parse(dt);
                spf = new SimpleDateFormat("MM/DD/yyyy"); //date format in which you want to convert
                dt = spf.format(newDate);
                System.out.println(dt);

                Log.e("FRM_DT", dt);

            } catch (ParseException e) {
                e.printStackTrace();
            }
            return dt;

        }

这对你有用。

String oldstring= "2017-05-23T06:25:50.0";
Date datee = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(oldstring);

TL;DR

private static final DateTimeFormatter DATE_FORMATTER 
        = DateTimeFormatter.ofPattern("MM/dd/uuuu");

private static String formatDate(String date) {
    return LocalDateTime.parse(date).format(DATE_FORMATTER);
}

现在 formatDate("2017-05-23T06:25:50") returns 想要的字符串 05/23/2017.

java.time

在 2017 年,我看不出你为什么要与早已过时且出了名的麻烦 SimpleDateFormat class 作斗争。 java.time,现代 Java 日期和时间 API 也称为 JSR-310,使用起来更方便。

从一种日期时间格式转换为另一种格式时,您通常需要两个格式化程序,一个用于解析输入格式,一个用于格式化为输出格式。不在这里。这是因为像 2017-05-23T06:25:50 这样的字符串采用 ISO 8601 格式,这是现代 classes 解析为默认格式的标准,即没有显式格式化程序。所以我们只需要一个格式化程序,用于格式化。

你的代码出了什么问题

当我运行你的代码时,我得到一个ParseException: Unparseable date: "2017-05-23T06:25:50"。如果您还没有注意到异常,那么您的项目设置中存在严重缺陷,它向您隐藏了有关错误的重要信息。请先修复。

A ParseException 有一个方法 getErrorOffset(有点被忽略),在这种情况下 returns 4. 字符串中的偏移量 4 是第一个连字符所在的位置。因此,当以 MM/DD/yyyy 格式解析时,您的 SimpleDateFormat 接受了 2017 年作为月份(很有趣,不是吗?),然后期待一个斜线并得到一个连字符,因此抛出异常。

您的格式模式字符串中还有另一个错误:大写字母 DD 表示年份(本例中为 143)。小写 dd 应该用于日期。

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

是的,你可以。只需要至少 Java 6.

  • 在 Java 8 及更高版本中内置了新的 API。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,新 classes 的 backport(ThreeTen for JSR 310)。
  • 在 Android 上,使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。

链接

这段代码对我有用:

 public static String getNewsDetailsDateTime(String dateTime) {
    @SuppressLint("SimpleDateFormat") DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    Date date = null;
    try {
        date = format.parse(dateTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    @SuppressLint("SimpleDateFormat") String strPublishDateTime = new SimpleDateFormat("MMM d, yyyy h:mm a").format(date);
    return strPublishDateTime;
}

输出格式为:2017 年 12 月 20 日下午 2.30。

试试这个:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar c = Calendar.getInstance();
try {
    c.setTime(sdf.parse(dt));
} catch (ParseException e) {
    e.printStackTrace();
}

SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
String output = sdf1.format(c.getTime());