Java 从日期中删除日期名称并将其设置为仅';yyyy-MM-dd HH:MM:ss';
我试图以yyyy-MM-dd HH:MM:ss格式获取当天上午6点的日期,但显示为:Wed Dec 20 06:00:00 CST 2017 这是我的代码:Java 从日期中删除日期名称并将其设置为仅';yyyy-MM-dd HH:MM:ss';,java,date,datetime,simpledateformat,date-formatting,Java,Date,Datetime,Simpledateformat,Date Formatting,我试图以yyyy-MM-dd HH:MM:ss格式获取当天上午6点的日期,但显示为:Wed Dec 20 06:00:00 CST 2017 这是我的代码: DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00"); Date date0 = new Date(); String x = dateFormat.format(date0); try{ D
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
Date date0 = new Date();
String x = dateFormat.format(date0);
try{
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = formatter.parse(x);
}
catch (Exception e){}
java.util.Date
是Unix时代以来毫秒数的容器,它不维护任何类型的内部格式概念,而是在打印时使用Date#toString
,它通常使用当前的Locale
提供值的可读表示
虽然我相信您可以继续使用Date
来实现这一点,但更简单的方法是利用较新的日期/时间API,比如
LocalDateTime now = LocalDateTime.now();
LocalDateTime then = now.withHour(6).withMinute(0).withSecond(0).withNano(0);
String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(then);
System.out.println(formatted);
对我来说,它打印出的
2017-12-21 06:00:00
java.util.Date
是一个容器,用于存储Unix时代以来的毫秒数,它不维护任何内部格式概念,而是在打印时,它使用Date#toString
,通常使用当前的Locale
来提供值的可读表示
虽然我相信您可以继续使用Date
来实现这一点,但更简单的方法是利用较新的日期/时间API,比如
LocalDateTime now = LocalDateTime.now();
LocalDateTime then = now.withHour(6).withMinute(0).withSecond(0).withNano(0);
String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(then);
System.out.println(formatted);
对我来说,它会打印出
2017-12-21 06:00:00
解析后,您需要将其格式化如下:formatter.format(date)
。因此,请按如下方式修改您的代码:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
Date date0 = new Date();
String x = dateFormat.format(date0);
try{
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = formatter.format(formatter.parse(x));
}
catch (Exception e){}
解析后,您需要按如下方式格式化:
formatter.format(date)
。因此,请按如下方式修改您的代码:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
Date date0 = new Date();
String x = dateFormat.format(date0);
try{
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = formatter.format(formatter.parse(x));
}
catch (Exception e){}
TL;博士
正在运行这个打印的
2017-12-21 06:00:00
细节
您使用的类,Date
和SimpleDateFormat
,从Java1.0开始已经存在了大约20年。事实证明,它们设计拙劣,使用繁琐。也许也是出于这个原因,关于它们的文章已经很多了,通过搜索web,你很容易就会得到这样的印象:这些是你应该使用的类。相反,它们是你应该避免的课程。他们的替代品是Java8,这将是4年前的事了
格式化程序用于格式化和解析。您不应该使用一个格式化程序,更不用说两个格式化程序,将一天的时间更改为上午6点
世界各地的日子都不一样。因此,获取今天的日期是一项取决于时区的操作。我已经在代码中明确了时区,因此读者也会意识到这一点。如果不是美国/温尼伯,请替换您想要的时区
您正在修改现有软件。如果从中获得了老式的Date
对象,请首先将其转换为现代的Instant
类型,然后使用现代API进行进一步的操作。例如:
Date date0 = getOldfashionedDateFromLegacyApi();
String at6Am = date0.toInstant()
.atZone(ZoneId.of("America/Winnipeg"))
.with(LocalTime.of(6, 0))
.format(formatter);
你的代码出了什么问题?
我认为你的问题中的代码没有任何问题。您希望您的日期时间格式为2017-12-20 06:00:00,并且您在第三行代码的字符串x
中得到了该格式。对此感到满意,并省略代码的其余部分
不存在将格式强加给日期时间对象的情况(无论我们谈论的是过时的还是现代的API)。格式化日期时间意味着将其转换为所需格式的字符串。TL;博士
正在运行这个打印的
2017-12-21 06:00:00
细节
您使用的类,Date
和SimpleDateFormat
,从Java1.0开始已经存在了大约20年。事实证明,它们设计拙劣,使用繁琐。也许也是出于这个原因,关于它们的文章已经很多了,通过搜索web,你很容易就会得到这样的印象:这些是你应该使用的类。相反,它们是你应该避免的课程。他们的替代品是Java8,这将是4年前的事了
格式化程序用于格式化和解析。您不应该使用一个格式化程序,更不用说两个格式化程序,将一天的时间更改为上午6点
世界各地的日子都不一样。因此,获取今天的日期是一项取决于时区的操作。我已经在代码中明确了时区,因此读者也会意识到这一点。如果不是美国/温尼伯,请替换您想要的时区
您正在修改现有软件。如果从中获得了老式的Date
对象,请首先将其转换为现代的Instant
类型,然后使用现代API进行进一步的操作。例如:
Date date0 = getOldfashionedDateFromLegacyApi();
String at6Am = date0.toInstant()
.atZone(ZoneId.of("America/Winnipeg"))
.with(LocalTime.of(6, 0))
.format(formatter);
你的代码出了什么问题?
我认为你的问题中的代码没有任何问题。您希望您的日期时间格式为2017-12-20 06:00:00,并且您在第三行代码的字符串x
中得到了该格式。对此感到满意,并省略代码的其余部分
不存在将格式强加给日期时间对象的情况(无论我们谈论的是过时的还是现代的API)。格式化日期时间意味着将其转换为所需格式的字符串。date
没有“格式”的内部概念,当您使用date#toString
时,它倾向于使用当前区域设置的格式,因此,您需要重新格式化结果。在这种情况下,您最好使用新的日期/时间API,通过hadd e.printStackTrace()设置时间会更简单;抓住并告诉我们答案error@StringForever我理解OP的问题,它没有抛出任何异常。格式本身工作正常,但OP希望使用与结果格式不同的格式。这只是与实际问题无关的错误做法。添加Locale.getDefault()以获取区域设置时间:-DateFormat DateFormat=new SimpleDateFormat(“yyy-MM-dd HH:MM:ss”,Locale.getDefault());String time=dateFormat.format(new Date());是