没有时间的日期不会隐藏秒数
Date without time doesn't hide seconds
我正在使用 Joda Time
从日期中删除秒数。
首先,我有这种Date
:
Thu Nov 05 00:00:00 CET 2020
我使用这种方法从本地数据库中选择这个日期:
public static Date dateTimeFromString(String s) {
String pattern = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date d= null;
try {
d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
从那天起,我将达到这样的形式:
Thu Nov 05 CET 2020
或者像这样更好:Thu Nov 05 2020
.
现在,我正在尝试使用 Joda Time:
中的这个方法
private Date dateWitoutTime(Date date){
return new LocalDate(date).toDate();
}
但仍然得到
Thu Nov 05 00:00:00 CET 2020
有什么帮助吗?谢谢。
不要用遗留的 error-prone java.util
date-time API 污染干净的 java.time
API。您可以使用 modern date-time API:
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now.format(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm", Locale.ENGLISH)));
System.out.println(now.format(DateTimeFormatter.ofPattern("EEE MMM dd uuuu", Locale.ENGLISH)));
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu", Locale.ENGLISH);
ZonedDateTime givenDateTime = ZonedDateTime.parse("Thu Nov 05 00:00:00 CET 2020", dtfInput);
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("EEE MMM dd z uuuu", Locale.ENGLISH);
System.out.println(givenDateTime.format(dtfOutput));
System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Paris")).format(dtfOutput));
}
}
输出:
04-Nov-2020 17:13
Wed Nov 04 2020
Thu Nov 05 CET 2020
Wed Nov 04 CET 2020
了解有关现代 date-time API 的更多信息
使用旧版 API:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
Date now = new Date();
System.out.println(new SimpleDateFormat("dd-MMM-yyyy HH:mm", Locale.ENGLISH).format(now));
System.out.println(new SimpleDateFormat("EEE MMM dd yyyy", Locale.ENGLISH).format(now));
SimpleDateFormat sdfInput = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
Date givenDateTime = sdfInput.parse("Thu Nov 05 00:00:00 CET 2020");
SimpleDateFormat sdfOutput = new SimpleDateFormat("EEE MMM dd z yyyy", Locale.ENGLISH);
sdfOutput.setTimeZone(TimeZone.getTimeZone("CET"));
System.out.println(sdfOutput.format(givenDateTime));
System.out.println(sdfOutput.format(now));
}
}
输出:
04-Nov-2020 17:13
Wed Nov 04 2020
Thu Nov 05 CET 2020
Wed Nov 04 CET 2020
如果您使用的是 Java8+,则不需要 JodaTime。
一个Date
实例包含时间;没有办法解决这个问题。也许您想 return 改为 String
。
// Pre-Java8
private String dateWithoutTime(final Date date) {
final SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d yyyy");
return sdf.format(date);
}
// Java8+
private String dateWithoutTime(final LocalDate date) {
final DateTimeFormat formatter = DateTimeFormatter.ofPattern("EEE MMM d yyyy");
return date.format(formatter);
}
private String dateWithoutTime(final Date date) {
final LocalDate localDate = convertDateToLocalDate(date);
return dateWithoutTime(localDate);
}
private LocalDate convertDateToLocalDate(final Date date) {
...
}
I want a String
, …
好吧,从一种字符串格式转换为另一种字符串格式有点不对劲。正如您将数字保存在 int
变量中并将布尔值保存在 boolean
变量中(我希望),您应该将日期保存在 LocalDate
变量中,或者是 LocalDate
class 来自 Joda-Time 或来自 java.time 的现代 Java 日期和时间 API 已取代 Joda-Time。但是既然你问了,那就让你的方法 return a String
:
private static final DateTimeFormatter dateFormatter
= DateTimeFormat.forPattern("EEE MMM dd yyyy").withLocale(Locale.ENGLISH);
public static String dateTimeFromString(String s) {
LocalDate date = LocalDate.parse(s);
return date.toString(dateFormatter);
}
让我们试试看:
System.out.println(dateTimeFromString("2020-11-05"));
输出:
Thu Nov 05 2020
我已经为格式化程序指定了语言环境,以确保打印的缩写是英文的。
您不能将 Date
或 LocalDate
打印为 Thu Nov 05 2020
。这些 classes 的 toString
方法被定义为打印特定格式。您只能在 String
中使用您选择的格式。这很好:它有助于将模型和演示文稿分开。
我正在使用 Joda Time
从日期中删除秒数。
首先,我有这种Date
:
Thu Nov 05 00:00:00 CET 2020
我使用这种方法从本地数据库中选择这个日期:
public static Date dateTimeFromString(String s) {
String pattern = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date d= null;
try {
d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
从那天起,我将达到这样的形式:
Thu Nov 05 CET 2020
或者像这样更好:Thu Nov 05 2020
.
现在,我正在尝试使用 Joda Time:
private Date dateWitoutTime(Date date){
return new LocalDate(date).toDate();
}
但仍然得到
Thu Nov 05 00:00:00 CET 2020
有什么帮助吗?谢谢。
不要用遗留的 error-prone java.util
date-time API 污染干净的 java.time
API。您可以使用 modern date-time API:
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now.format(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm", Locale.ENGLISH)));
System.out.println(now.format(DateTimeFormatter.ofPattern("EEE MMM dd uuuu", Locale.ENGLISH)));
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu", Locale.ENGLISH);
ZonedDateTime givenDateTime = ZonedDateTime.parse("Thu Nov 05 00:00:00 CET 2020", dtfInput);
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("EEE MMM dd z uuuu", Locale.ENGLISH);
System.out.println(givenDateTime.format(dtfOutput));
System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Paris")).format(dtfOutput));
}
}
输出:
04-Nov-2020 17:13
Wed Nov 04 2020
Thu Nov 05 CET 2020
Wed Nov 04 CET 2020
了解有关现代 date-time API 的更多信息
使用旧版 API:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
Date now = new Date();
System.out.println(new SimpleDateFormat("dd-MMM-yyyy HH:mm", Locale.ENGLISH).format(now));
System.out.println(new SimpleDateFormat("EEE MMM dd yyyy", Locale.ENGLISH).format(now));
SimpleDateFormat sdfInput = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
Date givenDateTime = sdfInput.parse("Thu Nov 05 00:00:00 CET 2020");
SimpleDateFormat sdfOutput = new SimpleDateFormat("EEE MMM dd z yyyy", Locale.ENGLISH);
sdfOutput.setTimeZone(TimeZone.getTimeZone("CET"));
System.out.println(sdfOutput.format(givenDateTime));
System.out.println(sdfOutput.format(now));
}
}
输出:
04-Nov-2020 17:13
Wed Nov 04 2020
Thu Nov 05 CET 2020
Wed Nov 04 CET 2020
如果您使用的是 Java8+,则不需要 JodaTime。
一个Date
实例包含时间;没有办法解决这个问题。也许您想 return 改为 String
。
// Pre-Java8
private String dateWithoutTime(final Date date) {
final SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d yyyy");
return sdf.format(date);
}
// Java8+
private String dateWithoutTime(final LocalDate date) {
final DateTimeFormat formatter = DateTimeFormatter.ofPattern("EEE MMM d yyyy");
return date.format(formatter);
}
private String dateWithoutTime(final Date date) {
final LocalDate localDate = convertDateToLocalDate(date);
return dateWithoutTime(localDate);
}
private LocalDate convertDateToLocalDate(final Date date) {
...
}
I want a
String
, …
好吧,从一种字符串格式转换为另一种字符串格式有点不对劲。正如您将数字保存在 int
变量中并将布尔值保存在 boolean
变量中(我希望),您应该将日期保存在 LocalDate
变量中,或者是 LocalDate
class 来自 Joda-Time 或来自 java.time 的现代 Java 日期和时间 API 已取代 Joda-Time。但是既然你问了,那就让你的方法 return a String
:
private static final DateTimeFormatter dateFormatter
= DateTimeFormat.forPattern("EEE MMM dd yyyy").withLocale(Locale.ENGLISH);
public static String dateTimeFromString(String s) {
LocalDate date = LocalDate.parse(s);
return date.toString(dateFormatter);
}
让我们试试看:
System.out.println(dateTimeFromString("2020-11-05"));
输出:
Thu Nov 05 2020
我已经为格式化程序指定了语言环境,以确保打印的缩写是英文的。
您不能将 Date
或 LocalDate
打印为 Thu Nov 05 2020
。这些 classes 的 toString
方法被定义为打印特定格式。您只能在 String
中使用您选择的格式。这很好:它有助于将模型和演示文稿分开。