Java 如何将此字符串转换为dateformat

Java 如何将此字符串转换为dateformat,java,date-format,Java,Date Format,我试着用SimpleDataFormat做这项工作, 但是我不知道如何处理字符串“2008-08-01T15:47:00.557”中的t,有人能帮我吗 我不是很确定。但是如果我没记错的话,你必须用你的格式用单引号把T括起来 String yourFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"; SimpleDataFormat sdf=新的SimpleDataFormat(“yyyy-MM-dd'T:HH:MM:ss.SSS”) API中给出了几乎完全相同的示例,请查

我试着用SimpleDataFormat做这项工作,
但是我不知道如何处理字符串“2008-08-01T15:47:00.557”中的t,有人能帮我吗

我不是很确定。但是如果我没记错的话,你必须用你的格式用单引号把T括起来

String yourFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";

SimpleDataFormat sdf=新的SimpleDataFormat(“yyyy-MM-dd'T:HH:MM:ss.SSS”)

API中给出了几乎完全相同的示例,请查看:-)
您需要使用格式“yyyy-MM-dd'T'hh:MM:ss.SSS”


另外,如果您试图处理xml日期,请检查以下问题:

,因为您的示例使用的是24小时格式,而不是AM/PM格式

你应该使用HH(大写)而不是HH

像这样

String EXT_JS_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
ISO 8601 字符串的格式恰好符合标准

java.time Java8及更高版本包含了一个框架来取代问题和其他答案中使用的旧日期时间类

新类在解析/生成字符串时默认使用ISO 8601标准。因此,无需指定编码格式模式

时区 您的输入字符串缺少任何时区或时间。因此,您必须指定此字符串具有含义的时区。如果不指定,解析将自动应用JVM的当前默认时区。不好,因为默认值可能不是用于字符串的区域。而且,JVM的默认值可以随时更改,即使在运行时也是如此

如果UTC 如果字符串的时区是UTC,只需添加一个
Z
(缩写为“Zulu”,意思是UTC)。然后解析为一个
瞬间
,UTC时间轴上的一个瞬间

String input = "2008-08-01T15:47:00.557";
Instant instant = Instant.parse ( input + "Z" );
转储到控制台

System.out.println ( "instant: " + instant );
瞬间:2008-08-01T15:47:00.557Z

中频时区 如果您的字符串用于其他时区,我们需要指定。使用正确的时区名称(不要使用媒体上看到的3-4个字母的代码)。在这里,我们任意选择蒙特勒尔时区

对于格式化模式,我们使用ISO 8601的一种预定义格式:(本地表示输入字符串中没有嵌入时区或偏移量)

转储到控制台。我们还从
ZoneDateTime
中提取了一个
即时
,这样您就可以在UTC中看到相同的时刻。通常,在您的业务逻辑中,最好在UTC工作;仅为用户的输出应用时区

System.out.println ( "input: " + input + " | zdt: " + zdt + " | instant of zdt: " + zdt.toInstant () );
输入:2008-08-01T15:47:00.557 | zdt:2008-08-01T15:47:00.557-04:00[美国/蒙特利尔]| zdt瞬间:2008-08-01T19:47:00.557Z


@法兹:太好了。我看你是新来的。当某个答案对您有所帮助时,您可以通过单击答案左侧的勾号来接受该答案。这样,问题被标记为已结束,回答者将因给出的答案而获得奖励。
System.out.println ( "input: " + input + " | zdt: " + zdt + " | instant of zdt: " + zdt.toInstant () );