我有一个采用日期并将其转换为长整数的方法。
Map<String, Object> row = new HashMap<>();
for (int i = 0; i < columns.size(); i++) {
String colName = columns.get(i);
if ("productionDate".equals( colName )) {
row.put(colName, ((Date) obj[i]).getTime());
} else {
row.put(columns.get(i), obj[i]);
}
我知道这条线正在改变格式,我正在寻找一种方法将其转换为MM-DD-YYYY
row.put(colName, ((Date) obj[i]).getTime());
答案 0 :(得分:2)
好了,既然您已将Date
转换为long
,如果您想以您指定的格式再次将其显示为日期,则需要:
1)将其恢复为Date
对象,即
Date myDate = new Date(mylongvalue);
2)使用SimpleDateFormat
从String
获得所需格式的Date
,即
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
String formattedDate = sdf.format(myDate);
System.out.println(formattedDate);
答案 1 :(得分:1)
answer by GriffeyDog和其他答案在向您展示如何从java.util.Date或java.sql.Date对象生成String时是正确的。但...
Java 8及更高版本附带java.time框架。这些新类取代了旧的java.util.Date/.Calendar和java.text.SimpleTextFormat类。事实证明,那些旧课程令人困惑,麻烦和有缺陷。
java.sql.Date
如果从数据库中获取java.sql.Date
对象(您的问题尚不清楚),则您只有日期值,没有时间或时区。所以转换为java.time.LocalDate类。
LocalDate localDate = myJavaSqlDate.toLocalDate();
java.util.Date
如果获得java.util.Date
个对象,请注意,尽管该类的名称是日期和时间的总和。转换为Instant
,UTC中时间轴上的一个时刻。
Instant instant = myJavaUtilDate.toInstant();
从那里调整到您希望日期具有意义的时区。在任何特定时刻,世界各地的日期都不一样。新的一天在东部早些时候开始。所以就在巴黎的午夜之后,蒙特利尔仍然是“昨天”。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
现在使用DateTimeFormatter
生成日期值的String表示。模式代码与旧java.text.SimpleDateFormat的模式代码略有不同,因此请仔细阅读class doc。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = zdt.format( formatter );
如果您坚持存储字符串,我建议您将格式更改为标准ISO 8601格式YYYY-MM-DD
。按字母顺序排序时,此类字符串值也恰好按时间顺序排列。默认情况下,java.time类使用ISO 8601格式。因此无需指定编码模式。只需转换为LocalDate,然后调用toString
。
String output = zdt.toLocalDate().toString();
更好的是,将LocalDate
个对象存储为地图中的值,而不是String
。仅在必要时生成特定格式的特定字符串表示,例如用于呈现给用户。鉴于LocalDate
现已内置于Java中,您可以放心地在整个代码中使用它,因为它始终可用。
答案 2 :(得分:0)
您可以尝试以下方式:
日期likesDate = new Date(); //是一个弥补日期 row.put(colName.DateFormat.getDateInstance(DateFormat.SHORT).format(likesDated));
SHORT表示您想要的格式。