Java 格式化日期-找不到符号
大家好,我有一个类,它接受带有日期/时间值的输入字符串。我必须把这些输入转换成不同的格式。下面是一个例子:Java 格式化日期-找不到符号,java,java-time,Java,Java Time,大家好,我有一个类,它接受带有日期/时间值的输入字符串。我必须把这些输入转换成不同的格式。下面是一个例子: class Format{ public String solution(String Dt) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm"); String fr = df.format(Dt); return fr; } } 输入Dt如下所示: Mar
class Format{
public String solution(String Dt) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
String fr = df.format(Dt);
return fr;
}
}
输入Dt如下所示:
March 16, 20018 7:56 AM
我从上面的代码中得到一个错误:
Format.java:13: error: cannot find symbol
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
^
symbol: class DateFormat
如果有人知道如何格式化我的输入日期字符串,请让我知道。多谢各位
我已尝试此操作,但仍会抛出一个错误:
SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date date=localDateFormat.parse(Dt);
错误:
Format.java:10: error: unreported exception ParseException; must be caught or declared to be thrown
Date date=localDateFormat.parse(Dt);
这是一个编译错误,修复丢失的导入。
parse()代码>抛出一个ParseException
(选中的异常),必须明确处理该异常:
try {
Date date=localDateFormat.parse(Dt);
} catch (ParseException ex) {
ex.printStackTrace(); //or log
}
这是一个编译错误,修复丢失的导入。
parse()代码>抛出一个ParseException
(选中的异常),必须明确处理该异常:
try {
Date date=localDateFormat.parse(Dt);
} catch (ParseException ex) {
ex.printStackTrace(); //or log
}
您应该使用DateTimeFormatter
s。首先创建要在文本中解析的格式化程序:
final DateTimeFormatter in = new DateTimeFormatterBuilder()
.appendPattern("MMMM dd, yyyy K:mm a")
.toFormatter(Locale.US);
MMMM
是一个文本月
dd
是月份的第几天
yyy
是年份
K
是上午/下午的小时数(1或2位)
mm
是小时分钟数
a
是上午/下午
我需要USLocale
,因为我的默认Locale
是UK,它只在AM/PM是小写时解析AM/PM。USLocale
仅以大写字母解析它们(在您的示例中)
然后,您可以创建一个格式化程序,以按自己喜欢的方式打印文本:
final DateTimeFormatter out = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");
最终代码:
public String solution(String Dt) {
final DateTimeFormatter in = new DateTimeFormatterBuilder()
.appendPattern("MMMM dd, yyyy K:mm a")
.toFormatter(Locale.US);
final DateTimeFormatter out = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");
return out.format(in.parse(Dt));
}
当前输出格式的一个缺陷是无法区分AM和PM。您可能应该使用HH
(0-23)而不是h
(0-12)。您应该使用DateTimeFormatter
s。首先创建要在文本中解析的格式化程序:
final DateTimeFormatter in = new DateTimeFormatterBuilder()
.appendPattern("MMMM dd, yyyy K:mm a")
.toFormatter(Locale.US);
MMMM
是一个文本月
dd
是月份的第几天
yyy
是年份
K
是上午/下午的小时数(1或2位)
mm
是小时分钟数
a
是上午/下午
我需要USLocale
,因为我的默认Locale
是UK,它只在AM/PM是小写时解析AM/PM。USLocale
仅以大写字母解析它们(在您的示例中)
然后,您可以创建一个格式化程序,以按自己喜欢的方式打印文本:
final DateTimeFormatter out = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");
最终代码:
public String solution(String Dt) {
final DateTimeFormatter in = new DateTimeFormatterBuilder()
.appendPattern("MMMM dd, yyyy K:mm a")
.toFormatter(Locale.US);
final DateTimeFormatter out = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");
return out.format(in.parse(Dt));
}
当前输出格式的一个缺陷是无法区分AM和PM。您可能应该使用HH
(0-23)而不是h
(0-12)。您需要同时导入java.text.DateFormat
和java.text.SimpleDateFormat
。另外,format
方法需要一个类型为Date
的参数,如果你给它传递一个字符串,它将无法编译。@我是否应该使用new Date()反斜杠将输入从字符串转换为日期格式?或者其他方法?这取决于你想要达到的目标。如果要重新格式化日期,需要先用parse
方法对其进行解析,然后用format
方法重新格式化。@反斜杠我只是想格式化日期。您能提供一个例子吗?还请注意,从Java8开始,格式化日期的“新”方法将改为使用,它使用新的日期和时间API。请参见,您需要同时导入java.text.DateFormat
和java.text.simpleDataFormat
。另外,format
方法需要一个类型为Date
的参数,如果你给它传递一个字符串,它将无法编译。@我是否应该使用new Date()反斜杠将输入从字符串转换为日期格式?或者其他方法?这取决于你想要达到的目标。如果要重新格式化日期,需要先用parse
方法对其进行解析,然后用format
方法重新格式化。@反斜杠我只是想格式化日期。您能提供一个例子吗?还请注意,从Java8开始,格式化日期的“新”方法将改为使用,它使用新的日期和时间API。请参阅答案中的避免提问。答案应该完全解决这个问题。请在回答中包括OP的解决方案/修复方案。(看)@espresso_咖啡好吧,你需要它们。。。你用什么编辑器?大多数IDE都会建议自动添加它们。您必须导入它们或使用完全限定的类名,包括“在类路径上”DateFormat
是一个标准的Java类(在类路径上隐式),应该只需要导入
{有效到包含Java 8,否则需要正确的模块}避免在回答中提问。答案应该完全解决这个问题。请在回答中包括OP的解决方案/修复方案。(看)@espresso_咖啡好吧,你需要它们。。。你用什么编辑器?大多数IDE都会建议自动添加它们。您必须导入它们或使用完全限定的类名,包括“在类路径上”DateFormat
是一个标准的Java类(在类路径上隐式),只需要import
{有效到包括Java8,否则需要正确的模块}我有字符串Dt
的输入值,并且以类格式传递。我需要格式化数据日期。这让人有点困惑为什么必须使用Locale.US。@espresso_coffee您需要正确的语言环境,以便解析器正确解释月份的名称(以及其他内容)。这很有帮助,我已经有一段时间没有使用JAVA了,因此它与ColdFusion不同。谢谢你的帮助。@espresso_coffee当然,很乐意帮忙。我有一个输入值,它是stringDt
,它是以类格式传递的。我需要格式化数据日期。这让人有点困惑为什么必须使用Locale.US。@espresso_coffee您需要正确的语言环境,以便解析器正确解释月份的名称(以及其他内容)。这很有帮助,我已经有一段时间没有使用JAVA了,因此它与ColdFusion不同。谢谢你的帮助。@espresso_咖啡当然,很乐意帮忙。