在Java中,有一种方法可以将MM/DD/YYYY
转换为DD-MMM-YYYY
吗?
例如:05/01/1999
转换为 01-MAY-99
在Java中,有一种方法可以将MM/DD/YYYY
转换为DD-MMM-YYYY
吗?
例如:05/01/1999
转换为 01-MAY-99
使用SimpleDateFormat解析日期,然后使用所需格式的SimpleDateFormat将其打印出来。
以下是一些代码:
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format2 = new SimpleDateFormat("dd-MMM-yy");
Date date = format1.parse("05/01/1999");
System.out.println(format2.format(date));
输出:
01-May-99
format1.setTimeZone(TimeZone.getTimeZone("GMT"));
来设置时区。 - Brian ClementsSimpleDateFormat
类已经过时且出了名的麻烦。不要使用它。自2014年以来,我们在java.time
,现代Java日期和时间API及其DateTimeFormatter
中有更好的选择。请参见Md. Asaduzzaman的正确答案。 - Ole V.V.在Java 8及以后的版本中,应该使用java.time类。要使用java.time,请添加:
import java.time.* ;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
String date = "15-Oct-2018";
LocalDate localDate = LocalDate.parse(date, formatter);
System.out.println(localDate);
System.out.println(formatter.format(localDate));
Locale.CANADA
或Locale.US
或Locale.UK
。将其作为可选的第二个参数传递给ofPattern
方法。运行时当前默认区域设置可能不是英语,此时该代码将失败并引发异常。 - Basil BourqueDate
/ Calendar
/SimpleDateFormat
类。 - Basil Bourque试一下这个:
Date currDate = new Date();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String strCurrDate = dateFormat.format(currDate);
System.out.println("strCurrDate->"+strCurrDate);
java.util.Date
、java.util.Calendar
和java.text.SimpleDateFormat
等非常麻烦的旧日期时间类现在被视为遗留系统,已被内置于Java 8及更高版本的java.time类所取代。请参阅Oracle的教程。 - Basil Bourquefinal DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate localDate = LocalDate.now();
System.out.println("Formatted Date: " + formatter.format(localDate));
Java 8 LocalDate
java.util
日期时间API及其格式化API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到现代日期时间API*。
Locale
敏感的DateTimeFormatter
)是Locale
敏感的,即相同的字母会在不同的Locale
中产生不同的文本。例如,MMM
用于月份名称的三个字母缩写,在不同的Locale
中可能是不同的单词。在缺少Locale
参数的情况下,它将使用JVM的Locale
。因此,永远不要忘记在没有Locale
参数的情况下使用日期时间解析/格式化类型。从不要在没有Locale的情况下使用SimpleDateFormat或DateTimeFormatter了解更多信息。DateTimeFormatter
实例 - 一个用于解析输入字符串,另一个用于根据要求的模式格式化输出字符串。
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("MM/dd/uuuu", Locale.ENGLISH);
String strDate = "05/01/1999";
LocalDate date = LocalDate.parse(strDate, dtfInput);
// The default string i.e. the value returned by LocalDate#toString
System.out.println(date);
DateTimeFormatter dtfOutputEng = DateTimeFormatter.ofPattern("dd-MMM-uuuu", Locale.ENGLISH);
String formattedEng = dtfOutputEng.format(date);
System.out.println(formattedEng);
DateTimeFormatter dtfOutputFr = DateTimeFormatter.ofPattern("dd-MMM-uuuu", Locale.FRENCH);
String formattedFr = dtfOutputFr.format(date);
System.out.println(formattedFr);
}
}
1999-05-01
01-May-1999
01-mai-1999
y
(年份)代替 Y
(基于周的年份),d
(月份中的天数)代替 D
(一年中的天数)。请查看文档以了解更多信息。y
代替 u
,但是我更喜欢使用 u
而不是 y
。从Trail: Date Time了解有关现代日期时间 API*的更多信息。
* 如果由于任何原因,您必须坚持使用Java 6或Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能移植到Java 6和7。如果您正在为Android项目工作,并且您的Android API级别仍不符合Java-8,请查看通过desugaring可用的Java 8+ API和如何在Android项目中使用ThreeTenABP。
试试这个
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // Set your date format
String currentData = sdf.format(new Date());
下面应该可以工作。
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
Date oldDate = df.parse(df.format(date)); //this date is your old date object
formatter = new SimpleDateFormat("dd-MMM-yy");
y
,月份中的日期使用d
。Y
没有意义,D
表示一年中的天数。您要将格式从MM/dd/yyyy
转换为dd-MMM-yyyy
。 - BalusC