我想转换String
成Date
不同的格式。
例如,
我从用户那里得到
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
我想将其转换fromDate
为"yyyy-MM-dd"
格式的Date对象
我怎样才能做到这一点?
Answers:
看一看SimpleDateFormat
。该代码是这样的:
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
e.printStackTrace();
}
Date
格式输出,而不是获取字符串格式吗?
parse
,请继续使用,不要继续format
。parse
将字符串解析为日期。
parse
我date format
所Fri Jan 06 00:01:00 EST 2012
需要的2012-01-06
System.out.println(anyDateObject)
默认的toString()方法时,该方法被称为以该格式打印,例如Fri Jan 06 00:01:00 EST 2012
。您需要覆盖它以适合您的需求。
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8的Java 9.请参见类教程由Oracle。
LocalDate.parse(
"19/05/2009" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
其他答案用java.util.Date
,java.sql.Date
和SimpleDateFormat
现在已经过时。
LocalDate
执行日期时间的现代方法是使用java.time类,特别是LocalDate
。该LocalDate
级表示没有时间一天和不同时区的日期,唯一的价值。
DateTimeFormatter
要解析或生成表示日期时间值的字符串,请使用DateTimeFormatter
此类。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );
不要将日期时间对象与表示其值的字符串混淆。一个日期时间对象有没有格式,而字符串中。日期时间对象(例如LocalDate
)可以生成一个String来表示其内部值,但是日期时间对象和String是单独的不同对象。
您可以指定任何自定义格式来生成字符串。或者让java.time做自动本地化的工作。
DateTimeFormatter f =
DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );
转储到控制台。
System.out.println( "ld: " + ld + " | output: " + output );
ld:2009-05-19 | 输出:2009年3月19日狂欢节
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
使用SimpleDateFormat
类:
private Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.parse(date);
}
用法:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
为了提高效率,您可能希望将格式程序存储在哈希图中。哈希图是util类的静态成员。
private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();
public static Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = hashFormatters.get(format);
if (formatter == null)
{
formatter = new SimpleDateFormat(format);
hashFormatters.put(format, formatter);
}
return formatter.parse(date);
}
将字符串日期转换为java.sql.Date
String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dtt = df.parse(fromDate);
java.sql.Date ds = new java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
检查javadocs,java.text.SimpleDateFormat
它描述了您需要的一切。
虽然SimpleDateFormat
确实可以满足您的需求,但您可能还需要查看Joda Time,它显然是Java 7中重做的Date库的基础。虽然我没有使用很多,但除了好东西我什么都听不到关于它,如果您在项目中广泛地处理日期,那么可能值得研究。
一个Date
对象没有格式,它是一个表示。日期可以String
用您喜欢的格式以表示。
例如“ yyyy-MM-dd
”,“ yy-MMM-dd
”,“ dd-MMM-yy
”等。
为此,您可以使用 SimpleDateFormat
试试这个,
String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
System.out.println(dateMyFormat); // outputs : 2009-05-19
} catch (ParseException e) {
e.printStackTrace();
}
输出:2009-05-19
假设您有一个像这样的字符串:
String mDate="2019-09-17T10:56:07.827088"
现在我们要用Java和KotlinString
分别更改此格式的日期和时间。
JAVA:
我们有一个提取日期的方法:
public String getDate() {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
Date date = dateFormat.parse(mDate);
dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
return dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Return
这是:09/17/2019
我们有提取时间的方法:
public String getTime() {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
Date date = dateFormat.parse(mCreatedAt);
dateFormat = new SimpleDateFormat("h:mm a", Locale.US);
return dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Return
这是: 上午10:56
科特琳:
我们有一个提取日期的功能:
fun getDate(): String? {
var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
val date = dateFormat.parse(mDate!!)
dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US)
return dateFormat.format(date!!)
}
Return
这是:09/17/2019
我们有提取时间的方法:
fun getTime(): String {
var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
val time = dateFormat.parse(mDate!!)
dateFormat = SimpleDateFormat("h:mm a", Locale.US)
return dateFormat.format(time!!)
}
Return
这是: 上午10:56
SimpleDateFormat
课程。至少不是第一选择。也并非毫无保留。今天,我们在java.time
Java的现代日期和时间API及其上有了很多改进DateTimeFormatter
。也SimpleDateFormat
无法正确解析秒(微秒)上的6位小数。
10:56 AM
您的要求,而是11:09 AM
(在Oracle jdk-11.0.3上进行了测试)。
DateTimeFormatter
我们需要达到minsdk 26
或更高的要求不是一件好事
10:56 AM