Change date format in a Java string
我有一个
1 |
我想把它转换成一个
2011-01-18
号
我怎样才能做到这一点?
好吧,根据我在下面找到的答案,我尝试了以下方法:
1 2 3 4 5 | String date_s =" 2011-01-18 00:00:00.0"; SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss"); Date date = dt.parse(date_s); SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd"); System.out.println(dt1.format(date)); |
号
但它输出的是
如果字符串正好包含时区部分,则使用
1 2 | String oldstring ="2011-01-18 00:00:00.0"; LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")); |
使用
1 2 |
。
或者,当您还没有在Java 8上时,使用EDCOX1(8)来将EDCOX1的2个解析以某种模式解析为EDCOX1(10)。
1 2 | String oldstring ="2011-01-18 00:00:00.0"; Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring); |
使用
1 2 | String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date); System.out.println(newstring); // 2011-01-18 |
。另请参见:
- Java串到日期转换
更新:根据失败的尝试:模式区分大小写。阅读
格式是区分大小写的,因此使用mm表示月份而不是mm(这表示分钟)和yyyy作为参考,你可以使用下面的作弊表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | G Era designator Text AD y Year Year 1996; 96 Y Week year Year 2009; 09 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day name in week Text Tuesday; Tue u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1 a Am/pm marker Text PM H Hour in day (0-23) Number 0 k Hour in day (1-24) Number 24 K Hour in am/pm (0-11) Number 0 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zone -0800 X Time zone ISO 8601 time zone -08; -0800; -08:00 |
号
示例:
1 2 3 4 5 6 7 8 9 10 11 | "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT "EEE, MMM d, ''yy" Wed, Jul 4, '01 "h:mm a" 12:08 PM "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time "K:mm a, z" 0:08 PM, PDT "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700 "yyMMddHHmmssZ" 010704120856-0700 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 2001-07-04T12:08:56.235-0700 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00 "YYYY-'W'ww-u" 2001-W27-3 |
号
答案当然是创建一个simpledateformat对象,并使用它来分析字符串到日期,并将日期格式化为字符串。如果您尝试过simpledateformat,但它不起作用,请显示您的代码和可能收到的任何错误。
附录:格式字符串中的"mm"与"mm"不同。月用mm,分钟用mm。此外,YYYYY与YYYY不同。例如。,:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class FormateDate { public static void main(String[] args) throws ParseException { String date_s ="2011-01-18 00:00:00.0"; // *** note that it's"yyyy-MM-dd hh:mm:ss" not"yyyy-mm-dd hh:mm:ss" SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = dt.parse(date_s); // *** same for the format String below SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(dt1.format(date)); } } |
为什么不直接用这个呢
1 2 3 4 5 | Date convertToDate(String receivedDate) throws ParseException{ SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); Date date = formatter.parse(receivedDate); return date; } |
号
另外,这是另一种方式:
1 2 | DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); String requiredDate = df.format(new Date()).toString(); |
号
或
号
干杯!
在Java 8和以后使用EDCOX1×21的包:
1 2 3 4 5 |
号
其他答案是正确的,基本上你的模式中的"Y"字符数是错误的。
时区不过还有一个问题……你没有解决时区问题。如果你想要UTC,那么你应该这么说。如果没有,答案就不完整。如果你想要的只是没有时间的日期部分,那么就没有问题了。但是,如果您做的进一步工作可能涉及到时间,那么您应该指定一个时区。
乔达时间这里有相同类型的代码,但是使用第三方开放源码joda time 2.3库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // ? 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. String date_s ="2011-01-18 00:00:00.0"; org.joda.time.format.DateTimeFormatter formatter = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd' 'HH:mm:ss.SSS" ); // By the way, if your date-time string conformed strictly to ISO 8601 including a 'T' rather than a SPACE ' ', you could // use a formatter built into Joda-Time rather than specify your own: ISODateTimeFormat.dateHourMinuteSecondFraction(). // Like this: //org.joda.time.DateTime dateTimeInUTC = org.joda.time.format.ISODateTimeFormat.dateHourMinuteSecondFraction().withZoneUTC().parseDateTime( date_s ); // Assuming the date-time string was meant to be in UTC (no time zone offset). org.joda.time.DateTime dateTimeInUTC = formatter.withZoneUTC().parseDateTime( date_s ); System.out.println("dateTimeInUTC:" + dateTimeInUTC ); System.out.println("dateTimeInUTC (date only):" + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInUTC ) ); System.out.println("" ); // blank line. // Assuming the date-time string was meant to be in Kolkata time zone (formerly known as Calcutta). Offset is +5:30 from UTC (note the half-hour). org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID("Asia/Kolkata" ); org.joda.time.DateTime dateTimeInKolkata = formatter.withZone( kolkataTimeZone ).parseDateTime( date_s ); System.out.println("dateTimeInKolkata:" + dateTimeInKolkata ); System.out.println("dateTimeInKolkata (date only):" + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInKolkata ) ); // This date-time in Kolkata is a different point in the time line of the Universe than the dateTimeInUTC instance created above. The date is even different. System.out.println("dateTimeInKolkata adjusted to UTC:" + dateTimeInKolkata.toDateTime( org.joda.time.DateTimeZone.UTC ) ); |
。
运行时…
1 2 3 4 5 6 | dateTimeInUTC: 2011-01-18T00:00:00.000Z dateTimeInUTC (date only): 2011-01-18 dateTimeInKolkata: 2011-01-18T00:00:00.000+05:30 dateTimeInKolkata (date only): 2011-01-18 dateTimeInKolkata adjusted to UTC: 2011-01-17T18:30:00.000Z |
号
请参阅此处的"日期和时间模式"。http://docs.oracle.com/javase/7/docs/api/java/text/simpledateformat.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.text.SimpleDateFormat; import java.util.Date; import java.text.ParseException; public class DateConversionExample{ public static void main(String arg[]){ try{ SimpleDateFormat sourceDateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss"); Date date = sourceDateFormat.parse("2011-01-18 00:00:00.0"); SimpleDateFormat targetDateFormat = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(targetDateFormat.format(date)); }catch(ParseException e){ e.printStackTrace(); } } } |
。
[编辑以包括Balusc的更正]simpledateformat类应该做到这一点:
1 2 3 4 5 6 7 8 | String pattern ="yyyy-MM-dd HH:mm:ss.S"; SimpleDateFormat format = new SimpleDateFormat(pattern); try { Date date = format.parse("2011-01-18 00:00:00.0"); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); } |
号
1 2 3 4 5 6 7 8 9 10 11 | try { String date_s ="2011-01-18 00:00:00.0"; SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); Date tempDate=simpledateformat.parse(date_s); SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("Output date is ="+outputDateFormat.format(tempDate)); } catch (ParseException ex) { System.out.println("Parse Exception"); } |
号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class SystemDateTest { String stringDate; public static void main(String[] args) { SystemDateTest systemDateTest = new SystemDateTest(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss"); systemDateTest.setStringDate(simpleDateFormat.format(systemDateTest.getDate())); System.out.println(systemDateTest.getStringDate()); } public Date getDate() { return new Date(); } public String getStringDate() { return stringDate; } public void setStringDate(String stringDate) { this.stringDate = stringDate; } } |
号
1 2 3 4 5 6 7 8 9 10 11 12 13 | String str ="2000-12-12"; Date dt = null; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); try { dt = formatter.parse(str); } catch (Exception e) { } JOptionPane.showMessageDialog(null, formatter.format(dt)); |
。
您只需使用:
1 2 3 4 | Date yourDate = new Date(); SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); String date = DATE_FORMAT.format(yourDate); |
号
它工作得很好!
也可以使用substring()。
1 2 |
。
如果您想在日期前留一个空格,请使用
1 2 |
1 2 3 4 5 6 7 8 9 | private SimpleDateFormat dataFormat = new SimpleDateFormat("dd/MM/yyyy"); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(value instanceof Date) { value = dataFormat.format(value); } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); }; |
取下一个Y形
您可以尝试Java 8新的EDCOX1(10),可以在Oracle文档中找到更多的信息。
或者你可以试试旧的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static Date getDateFromString(String format, String dateStr) { DateFormat formatter = new SimpleDateFormat(format); Date date = null; try { date = (Date) formatter.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } public static String getDate(Date date, String dateFormat) { DateFormat formatter = new SimpleDateFormat(dateFormat); return formatter.format(date); } |