将字符串转换为带毫秒的日期
Convert String to Date with Milliseconds
我知道有很多关于如何将字符串转换为日期的主题,我正在使用 'SimpleDateFormat' 并且我有一个包含(年、月、日、小时、分钟、秒、毫秒)的字符串) 但是当我使用 'SimpleDateFormat' 时,没有设置毫秒
这里是代码和输出:
import java.text.SimpleDateFormat;
import java.util.Date;
String strDate = "2020-08-27T10:06:07.413";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date dateFormatter = formatter.parse(strDate);
System.out.println(dateFormatter);
输出:
Thu Aug 27 10:06:07 WAT 2020
我想要日期类型的结果
日期 class 将时间存储为毫秒,如果查看日期对象,您会发现它实际上有 1598515567413 毫秒的时间。
你被使用 Date 的 toString() 方法的 System.out.println() 愚弄了。此方法使用“EEE MMM dd HH:mm:ss zzz yyyy”格式显示日期并简单地省略所有毫秒数。
如果您使用格式字符串中包含毫秒的格式化程序,您将看到毫秒是正确的:
System.out.println(formatter.format(dateFormatter));
输出 2020-08-27T10:06:07.413
您可以使用:
String strDate = "2020-08-27T10:06:07.413"
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
DateTime datetimeDF = formatter.parseDateTime(strDate);
String text = formatter.print(datetimeDF);
System.out.println(text);
或者您可以使用 java.time
:
String strDate = "2020-08-27T10:06:07.413"
LocalDateTime ldate = LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"));
并根据需要使用对象 ldate
。
更新(基于 OP 的 ):
您提到了:谢谢,这真的很有帮助我已经尝试了 java.util 但我无法使用 LocalDateTime 在数据库中设置日期,这就是为什么我我正在使用日期
您必须使用 PreparedStatement#setObject
将 LocalDate
设置到数据库 table 例如
LocalDate localDate = LocalDate.now();
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, localDate);
st.executeUpdate();
st.close();
原回答:
下面给出的是 java.util.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 == BaseCalendar.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(), TimeZone.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
如您在此实现中所见,它不包括 milliseconds
,因此如果您按以下代码打印 date
,您将得到 Date#toString
returns 因此,您不会在输出中看到 milliseconds
。
String strDate = "2020-08-27T10:06:07.413";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date date= formatter.parse(strDate);
System.out.println(date);
我假设您已经知道 System.out.println(obj)
打印 obj.toString()
返回的字符串。
如何获得自定义格式的输出?
您有两个选择:
推荐选项:使用 date-time 格式化程序,例如SimpleDateFormat
如下图:
String strDate = "2020-08-27T10:06:07.413";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date date = formatter.parse(strDate);
System.out.println(date);
String dateStr = formatter.format(date);
System.out.println(dateStr);
通过扩展 java.util.Date
创建自定义 class 来覆盖 Date
的 toString
实现。虽然这是一个选项,但我从不推荐这样做。
最后提个建议:
停止使用和error-pronejava.util
date-timeAPI和SimpleDateFormat
。切换到 modern java.time
date-time API and the corresponding formatting API (java.time.format
). Learn more about the modern date-time API from Trail: Date Time.
我知道有很多关于如何将字符串转换为日期的主题,我正在使用 'SimpleDateFormat' 并且我有一个包含(年、月、日、小时、分钟、秒、毫秒)的字符串) 但是当我使用 'SimpleDateFormat' 时,没有设置毫秒 这里是代码和输出:
import java.text.SimpleDateFormat;
import java.util.Date;
String strDate = "2020-08-27T10:06:07.413";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date dateFormatter = formatter.parse(strDate);
System.out.println(dateFormatter);
输出:
Thu Aug 27 10:06:07 WAT 2020
我想要日期类型的结果
日期 class 将时间存储为毫秒,如果查看日期对象,您会发现它实际上有 1598515567413 毫秒的时间。
你被使用 Date 的 toString() 方法的 System.out.println() 愚弄了。此方法使用“EEE MMM dd HH:mm:ss zzz yyyy”格式显示日期并简单地省略所有毫秒数。
如果您使用格式字符串中包含毫秒的格式化程序,您将看到毫秒是正确的:
System.out.println(formatter.format(dateFormatter));
输出 2020-08-27T10:06:07.413
您可以使用:
String strDate = "2020-08-27T10:06:07.413"
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
DateTime datetimeDF = formatter.parseDateTime(strDate);
String text = formatter.print(datetimeDF);
System.out.println(text);
或者您可以使用 java.time
:
String strDate = "2020-08-27T10:06:07.413"
LocalDateTime ldate = LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"));
并根据需要使用对象 ldate
。
更新(基于 OP 的 ):
您提到了:谢谢,这真的很有帮助我已经尝试了 java.util 但我无法使用 LocalDateTime 在数据库中设置日期,这就是为什么我我正在使用日期
您必须使用 PreparedStatement#setObject
将 LocalDate
设置到数据库 table 例如
LocalDate localDate = LocalDate.now();
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, localDate);
st.executeUpdate();
st.close();
原回答:
下面给出的是 java.util.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 == BaseCalendar.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(), TimeZone.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
如您在此实现中所见,它不包括 milliseconds
,因此如果您按以下代码打印 date
,您将得到 Date#toString
returns 因此,您不会在输出中看到 milliseconds
。
String strDate = "2020-08-27T10:06:07.413";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date date= formatter.parse(strDate);
System.out.println(date);
我假设您已经知道 System.out.println(obj)
打印 obj.toString()
返回的字符串。
如何获得自定义格式的输出?
您有两个选择:
推荐选项:使用 date-time 格式化程序,例如
SimpleDateFormat
如下图:String strDate = "2020-08-27T10:06:07.413"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); Date date = formatter.parse(strDate); System.out.println(date); String dateStr = formatter.format(date); System.out.println(dateStr);
通过扩展
java.util.Date
创建自定义 class 来覆盖Date
的toString
实现。虽然这是一个选项,但我从不推荐这样做。
最后提个建议:
停止使用和error-pronejava.util
date-timeAPI和SimpleDateFormat
。切换到 modern java.time
date-time API and the corresponding formatting API (java.time.format
). Learn more about the modern date-time API from Trail: Date Time.