如何转换日期格式

时间:2011-12-21 11:28:08

标签: java date

我的日期格式为“11月10,1980”字符串格式(String str =“1980年11月10日”),我想将其转换为1980-11-10。任何人都可以告诉我如何使用java。

提前致谢

7 个答案:

答案 0 :(得分:2)

您应首先从原始文本格式解析它,然后使用您希望它最终格式化的结果格式化结果。您可以使用SimpleDateFormatJoda Time(这通常是一个更好的日期/时间API)。

使用SimpleDateFormat的示例代码:

import java.text.*;
import java.util.*;

public class Test {

    public static void main(String[] args) throws Exception {        
        String inputText = "Nov 10,1980";

        TimeZone utc = TimeZone.getTimeZone("UTC");

        // Or dd instead of d - it depends whether you'd use "Nov 08,1980"
        // or "Nov 8,1980" etc.
        SimpleDateFormat inputFormat = new SimpleDateFormat("MMM d,yyyy",
                                                            Locale.US);
        inputFormat.setTimeZone(utc);

        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd",
                                                             Locale.US);
        outputFormat.setTimeZone(utc);

        Date parsed = inputFormat.parse(inputText);
        String outputText = outputFormat.format(parsed);

        System.out.println(outputText); // 1980-11-10
    }
}

请注意:

  • 我明确指定了要使用的语言环境;否则,如果您尝试使用(例如)法语默认语言环境解析系统上的文本,它将尝试使用法语月份名称对其进行解析。
  • 我已明确将时区设置为UTC,以避免任何夏令时问题(特定值在默认时区内可能不明确或甚至不存在)

答案 1 :(得分:1)

使用此

            Date date = new Date();
    SimpleDateFormat sdf;
    sdf = new SimpleDateFormat("yyyy-MM-DD");
    System.out.println(sdf.format(date));

答案 2 :(得分:1)

try {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MMM dd, yyyy");
    Date strDt = sdf1.parse("Nov 10, 1980");
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(sdf2.format(strDt));
} catch (Exception e) {
    e.printStackTrace();
}

答案 3 :(得分:1)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

另外,下面引用的是来自 home page of Joda-Time 的通知:

<块引用>

请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310) - JDK 的核心部分,取代了该项目。

使用 java.time(现代日期时间 API)的解决方案:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("MMM d,u", Locale.ENGLISH);
        LocalDate date = LocalDate.parse("Nov 10,1980", dtfInput);
        System.out.println(date);
    }
}

输出:

1980-11-10

ONLINE DEMO

请注意,我没有使用 DateTimeFormatter 来格式化 LocalDate,因为您想要的格式与 ISO 8601 格式相同,这也是 java.time 使用的标准应用程序接口。查看 LocalDate#toString 文档了解更多详情。

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 4 :(得分:0)

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String req_date = dateFormat.format(DATE)
System.out.println(req_date)

答案 5 :(得分:0)

您可以使用两个SimpleDateFormat。一个解析,一个解码。例如:

public static void main(String[] args) throws ParseException {
    DateFormat parseFormat = new SimpleDateFormat("MMM dd,yyyy");
    DateFormat displayFormat = new SimpleDateFormat("yyyy-MM-dd");

    Date date = parseFormat.parse("Nov 10,1980");
    String s = displayFormat.format(date);
    System.err.println(s);
}

答案 6 :(得分:0)

使用SimpleDateFormat获得您想要的结果