将字符串转换为 iso 日期格式
Convert a string into iso date format
所以我正在尝试将字符串转换为日期的 iso 格式。
这是我要转换的字符串“2016-07-05 02:14:35.0”
我想要这种格式的 iso 8601
“2016-07-05T02:14:35.0”
目前我有这个
DateTimeFormatter format = DateTimeFormat.forPattern("YYYY-MM-DDTHH:mm:sszzz");
new LocalDate();
LocalDate newDate = LocalDate.parse(created,format);
created = newDate.toString();
但它给了我这个例外
ERROR: Illegal pattern component: T; nested exception is java.lang.IllegalArgumentException: Illegal pattern component: T
我按照示例进行操作,但我不知道我在这里做错了什么。
任何帮助,将不胜感激。
使用以下格式进行转换
String format = "yyyy-mm-dd hh:mm:ss"
您使用的转换格式有误。使用 T 只是将日期和时间分开。
使用这样的格式
String = "yyyy-MM-dd'T'HH:mm:ss"
首先,该值是 LocalDateTime
, 而不是 LocalDate
。如果你想在最后得到一个日期,我会先把它转换成 LocalDateTime
,然后取日期部分。
执行日期格式化和解析时,请始终非常仔细地阅读文档。看起来您正在使用 Joda Time(由于使用 forPattern
;如果您可以移动到 Java 8,那将是有益的)。这意味着您应该阅读 DateTimeFormat
docs.
您的模式当前存在的问题:
- 您正在使用 'D' 而不是 'd';这意味着一年中的某一天
- 您指定了 'T' 而没有引用它,而且它也不在模式中
- 您忽略了值的小数部分
- 当值中没有时区指示符时,您指定了 'zz'。
这是一个工作示例:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, format);
System.out.println(localDateTime);
}
}
如果您 实际上 想要解析中间带有 T
的值,您将使用 "yyyy-MM-dd'T'HH:mm:ss.S"
的模式 - 请注意 [= =17=] 被引用,因此它按字面意思处理,而不是作为格式说明符。
请注意,这只是 解析。它不是 "converting a string into ISO date format" - 它正在将字符串转换为 LocalDateTime
。如果您随后想要 格式化 ISO 格式的值,则需要使用 DateTimeFormatter.print
和适当的格式。例如,您可能希望转换为 yyyy-MM-dd'T'HH:mm:ss.S
':
的格式
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, parser);
DateTimeFormatter printer = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
String formatted = printer.print(localDateTime);
System.out.println(formatted); // Output 2016-07-05T02:14:35.0
}
}
上面的代码只能处理一位数的秒数。您可以使用 .SSS
而不是 .S
进行解析,但您确实需要计算出在不同情况下您希望输出的内容(例如,对于 100 毫秒,您想要 .1 还是 .100?) .
您的代码有一些错误:
- 模式应该是'yyyy-MM-dd HH:mm:ss.SSS'。注意上层-
和小写。
- 使用 LocalDateTime 获取日期和时间。 LocalDate 只保存日期。
更正后的代码:
String created = "2016-07-05 02:14:35.000";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime newDate = LocalDateTime.parse(created,format);
created = newDate.toString();
System.out.println(created);
所以我正在尝试将字符串转换为日期的 iso 格式。 这是我要转换的字符串“2016-07-05 02:14:35.0” 我想要这种格式的 iso 8601 “2016-07-05T02:14:35.0”
目前我有这个
DateTimeFormatter format = DateTimeFormat.forPattern("YYYY-MM-DDTHH:mm:sszzz");
new LocalDate();
LocalDate newDate = LocalDate.parse(created,format);
created = newDate.toString();
但它给了我这个例外
ERROR: Illegal pattern component: T; nested exception is java.lang.IllegalArgumentException: Illegal pattern component: T
我按照示例进行操作,但我不知道我在这里做错了什么。 任何帮助,将不胜感激。
使用以下格式进行转换
String format = "yyyy-mm-dd hh:mm:ss"
您使用的转换格式有误。使用 T 只是将日期和时间分开。 使用这样的格式
String = "yyyy-MM-dd'T'HH:mm:ss"
首先,该值是 LocalDateTime
, 而不是 LocalDate
。如果你想在最后得到一个日期,我会先把它转换成 LocalDateTime
,然后取日期部分。
执行日期格式化和解析时,请始终非常仔细地阅读文档。看起来您正在使用 Joda Time(由于使用 forPattern
;如果您可以移动到 Java 8,那将是有益的)。这意味着您应该阅读 DateTimeFormat
docs.
您的模式当前存在的问题:
- 您正在使用 'D' 而不是 'd';这意味着一年中的某一天
- 您指定了 'T' 而没有引用它,而且它也不在模式中
- 您忽略了值的小数部分
- 当值中没有时区指示符时,您指定了 'zz'。
这是一个工作示例:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, format);
System.out.println(localDateTime);
}
}
如果您 实际上 想要解析中间带有 T
的值,您将使用 "yyyy-MM-dd'T'HH:mm:ss.S"
的模式 - 请注意 [= =17=] 被引用,因此它按字面意思处理,而不是作为格式说明符。
请注意,这只是 解析。它不是 "converting a string into ISO date format" - 它正在将字符串转换为 LocalDateTime
。如果您随后想要 格式化 ISO 格式的值,则需要使用 DateTimeFormatter.print
和适当的格式。例如,您可能希望转换为 yyyy-MM-dd'T'HH:mm:ss.S
':
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, parser);
DateTimeFormatter printer = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
String formatted = printer.print(localDateTime);
System.out.println(formatted); // Output 2016-07-05T02:14:35.0
}
}
上面的代码只能处理一位数的秒数。您可以使用 .SSS
而不是 .S
进行解析,但您确实需要计算出在不同情况下您希望输出的内容(例如,对于 100 毫秒,您想要 .1 还是 .100?) .
您的代码有一些错误:
- 模式应该是'yyyy-MM-dd HH:mm:ss.SSS'。注意上层-
和小写。 - 使用 LocalDateTime 获取日期和时间。 LocalDate 只保存日期。
更正后的代码:
String created = "2016-07-05 02:14:35.000";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime newDate = LocalDateTime.parse(created,format);
created = newDate.toString();
System.out.println(created);