将字符串转换为 java 中的日期,格式为 2012-07-27
Posted
技术标签:
【中文标题】将字符串转换为 java 中的日期,格式为 2012-07-27【英文标题】:convert string to date in java in format 2012-07-27 【发布时间】:2012-09-06 12:57:41 【问题描述】:我的输入字符串为 2012-07-27,我希望输出为日期,但格式与 2012-07-27 相同
我的代码是
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try
Date today = df.parse("20-12-2005");
System.out.println("Today = " + df.format(today));
catch (ParseException e)
e.printStackTrace();
我的输出是
Fri Jul 27 00:00:00 IST 2012
但我想返回日期对象,例如 2012-07-26 23:59:59 而不是字符串,请提供任何帮助
任何帮助都非常感谢充分
【问题讨论】:
日期没有格式。 使用format
方法代替`parse'
听起来你已经拥有你想要的字符串了。您正在尝试从“2012-07-27”转到“2012-07-27”-我在这里缺少什么?
仅供参考,麻烦的旧日期时间类,如 java.util.Date
、java.util.Calendar
和 java.text.SimpleDateFormat
现在是 legacy,被 Java 8 和 Java 中内置的 java.time 类所取代9. 见Tutorial by Oracle。
【参考方案1】:
您可以使用与解析日期相同的SimpleDateFormat
,将日期格式化为字符串。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = formatter.parse("2012-07-27");
System.out.println(date1); // prints Fri Jul 27 00:00:00 IST 2012
System.out.println(formatter.format(date1)); // prints 2012-07-26
【讨论】:
谢谢,但我想返回日期对象而不是像 2012-07-26 23:59:59 这样的字符串,请提供任何帮助【参考方案2】:首先,我认为重要的是要注意System.out.println
隐式调用其参数的toString
方法。参数必须是 Object
或其子类。而Date
是Object
的子类。话虽如此,看看 1.7 Date#toString
的实现,
public String toString()
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY)
index = 8;
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null)
sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
else
sb.append("GMT");
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
Date
对象的字符串表示形式指定为EEE MMM dd HH:mm:ss zzz yyyy
。这正是您所看到的。
如果您想以不同的格式显示Date
对象,请使用SimpleDateFormat
类。它的唯一目的是为 Date
对象表示为字符串的方式增加灵活性。
还有...
一种可能但荒谬的解决方法是创建自己的包装类,
public class MyDate
private final Date d;
private final SimpleDateFormat sdf;
public(Date d, SimpleDateFormat sdf)
this.d = d;
this.sdf = sdf;
// not recommended...should only be used for debugging purposes
@Override
public String toString()
return sdf.format(d);
【讨论】:
【参考方案3】:您必须使用另一个具有所需输出格式的SimpleDateFormat
(format()
)
【讨论】:
【参考方案4】:您可以使用相同的SimpleDateFormat
获取日期的String
表示。 format
方法是这样做的:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2012-07-27");
System.out.println(sdf.format(date1);
【讨论】:
【参考方案5】:SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));
【讨论】:
【参考方案6】:java.util.Date
中没有“格式”属性。 Date
实例是一个相当简单的对象,代表一个时刻(实际上,它的状态仅由它内部存储的 unix 时间戳定义)。
正如其他人所说,使用(例如)SimpleDateFormat
将Date
实例打印为字符串。
【讨论】:
【参考方案7】:tl;博士
LocalDate.parse( "2012-07-27" )
.toString()
2012-07-27
详情
现代方法是使用 java.time 类。
LocalDate
类表示没有时间和时区的仅日期值。
标准格式
您的输入字符串格式恰好符合ISO 8601 标准。 java.time 类在解析/生成表示日期时间值的字符串时默认使用 ISO 8601 格式。所以根本不需要指定格式模式。
LocalDate ld = LocalDate.parse( "2012-07-27" );
不要将日期时间对象与表示其值的字符串混为一谈。日期时间类/对象可以解析一个字符串并生成一个字符串,但String
始终是一个单独且不同的对象。
String output = ld.toString();
2012-07-27
自定义格式
如果您的输入是非标准的,请定义一个 DateTimeFormatter
来匹配。
String input = "20-12-2005" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
ld.toString(): 2012-07-27
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
Java SE 8 和 SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6 和 SE 7 ThreeTen-Backport 中的大部分 java.time 功能都向后移植到 Java 6 和 7。 Android ThreeTenABP 项目专门为 android 适配 ThreeTen-Backport(如上所述)。 见How to use ThreeTenABP…。ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
和more。
【讨论】:
以上是关于将字符串转换为 java 中的日期,格式为 2012-07-27的主要内容,如果未能解决你的问题,请参考以下文章
在 db2 中将字符串日期(yyyy/mm/dd)转换为日期格式
如何将 Java 日期字符串/对象转换为 JFreeChart 日期格式?