Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 格式化日期-找不到符号_Java_Java Time - Fatal编程技术网

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
是上午/下午

我需要US
Locale
,因为我的默认
Locale
是UK,它只在AM/PM是小写时解析AM/PM。US
Locale
仅以大写字母解析它们(在您的示例中)

然后,您可以创建一个格式化程序,以按自己喜欢的方式打印文本:

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
是上午/下午

我需要US
Locale
,因为我的默认
Locale
是UK,它只在AM/PM是小写时解析AM/PM。US
Locale
仅以大写字母解析它们(在您的示例中)

然后,您可以创建一个格式化程序,以按自己喜欢的方式打印文本:

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当然,很乐意帮忙。我有一个输入值,它是string
Dt
,它是以类格式传递的。我需要格式化数据日期。这让人有点困惑为什么必须使用Locale.US。@espresso_coffee您需要正确的语言环境,以便解析器正确解释月份的名称(以及其他内容)。这很有帮助,我已经有一段时间没有使用JAVA了,因此它与ColdFusion不同。谢谢你的帮助。@espresso_咖啡当然,很乐意帮忙。