当前位置: 首页 > 知识库问答 >
问题:

日期格式不起作用

燕志学
2023-03-14

我正在尝试将字符串转换为日期,我希望该日期的格式为“yyyy-MM-d HH:MM:ss”,我不知道如何将该格式转换为字符串。我的问题是,我希望以上述格式获取日期,而不是字符串,而是“date”?

我是这样做的

for(int k=0;k<12;k++)//for the months
{
     //i have added if condtion for the months with 31 and 30 and 28 days
    Calendar dateFromCal = Calendar.getInstance();
    dateFromCal.setTime(date);
    dateFromCal.set(year, k, 1, 0, 0, 0);

    Calendar dateToCal = Calendar.getInstance();
    dateToCal.setTime(date);
    dateToCal.set(year, k, 31, 23, 59, 59);

    //i have set the date format as 'yyyy:MM:dd HH:mm:ss'  
    dateFrom = dateFormat.format(dateFromCal.getTime());
    dateTo = dateFormat.format(dateToCal.getTime());

    fromdate = (Date)dateFormat.parse(dateFrom);
    todate = (Date)dateFormat.parse(dateTo);

}       

通过使用上述代码,我以以下格式获取日期

Sat Nov 01 00:00:00 GMT 2014

但我希望日期格式为

2014-11-01 00:00:00

注意:我希望此结果作为日期而不是字符串

请给我解决方案谢谢......

共有3个答案

费子濯
2023-03-14

我对一个需要特定格式(javax.xml.datatype.XMLGregorianCalendar)的API也有同样的问题。在我的例子中,我通过java 7解决了这个问题

my_日期。setTimezone(DatatypeConstants.FIELD\u未定义

通过这样做,您可以获得日期的最终结果。

朱伯寅
2023-03-14

注意:我希望此结果作为日期而不是字符串

简短的回答:这是不可能的。

详情:

A<代码>java。util。Date对象只是表示时间线上的一个瞬间,即自UNIX纪元(1970年1月1日,00:00:00 GMT)以来的毫秒数的包装。由于它不保存任何时区信息,其函数应用JVM的时区返回一个字符串,格式为EEE MMM dd HH:mm:ss zzz yyyy,由该毫秒值派生。获取java的字符串表示。util。日期对象的格式和时区不同,您需要使用所需格式和适用的时区,例如。

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);

sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String strDateNewYork = sdf.format(date);

sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String strDateUtc = sdf.format(date);

事实上,没有一个标准的日期时间类具有保存格式信息的属性。即使某些库或自定义类promise这样做,也违反了单一责任原则。日期时间对象应该存储关于日期、时间、时区等的信息,而不是关于格式的信息。以所需格式表示日期时间对象的唯一方法是使用日期时间解析/格式类型将其格式化为字符串:

  • 对于现代日期时间API:java。时间总体安排日期时间格式
  • 对于传统的日期时间API:java。文本SimpleDataFormat

java。utilDate-Time API及其格式化API,SimpleDateFormat已过时且容易出错。建议完全停止使用它们,并切换到现代日期时间API。

此外,下面引用的是来自Joda-Time主页的通知:

注意,从Java SE 8开始,要求用户迁移到Java。时间(JSR-310)-JDK的核心部分,它取代了这个项目。

使用java的解决方案。时间,现代日期时间API:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        int year = 2021;
        int month = 6;
        int hour = 23;
        int minute = 59;
        int second = 59;
        
        LocalDateTime ldt = LocalDate.of(year, month, 1)
                            .with(TemporalAdjusters.lastDayOfMonth())
                            .atTime(LocalTime.of(hour, minute, second));

        // Default format i.e. ldt#toString
        System.out.println(ldt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss", Locale.ENGLISH);
        String formatted = dtf.format(ldt);
        System.out.println(formatted);
    }
}

输出:

2021-06-30T23:59:59
2021-06-30 23:59:59

在线演示

从Trail:Date-Time了解更多关于现代日期时间API的信息。

无论出于何种原因,如果你必须坚持使用Java 6或Java 7,你都可以使用Three-Ten Backport,它支持大部分Java。Java 6的时间功能

皇甫波峻
2023-03-14

我想以上述格式获取日期,不是字符串,而是“日期”?

您要求的是特定格式的Date——这就像说“我想要十六进制格式的intDate没有格式——它只是时间上的一个瞬间。它不知道日历系统或时区——它只是自Unix时代以来的几毫秒。如果你想要一个格式化的值,那就是一个字符串。

您可能只需要保持日期不变,然后将其格式化,使其更接近用户界面。

 类似资料:
  • 问题内容: 我为jExcelApi类创建了一个包装器,以轻松地将对象列表导出到Excel。为了最大程度地减少对象创建,单元格格式将创建为静态字段,并在连续的导出调用中重用。但是我在使用日期格式时遇到了问题- 第一个调用的效果很好,但是在所有连续的导出中,日期单元格都使用数字格式而不是日期格式。如果我为日期格式创建了一个新对象而不是使用静态字段,那么一切都很好。是否有理由将相同格式的对象用于不同的工

  • 我正在尝试将时间戳值转换为twig文件中的日期格式,但出现以下错误。 错误: 在呈现模板期间引发了异常(“DateTime::\构造():无法分析时间字符串(

  • 设定年月日的排列顺序。

  • 问题内容: 我正在学习Go,并且正在尝试对日期时间进行JSON解组。 我有一个用C语言编写的程序生成的JSON,我正在输出我认为有效的ISO8601 / RFC3339时区偏移量。我正在使用以下格式字符串: (请注意,本机不支持,我有一个包装器将其替换为纳秒级)。 然后,将产生以下结果: 但是在Go中取消编组此功能将无效:https : //play.golang.org/p/vzOXbzAwdW

  • 我有两个字符串格式的日期:说,格式为。比较日期1和日期2的相等性的最佳方法是什么?我不关心时间,只关心日、年、月。我应该将它们转换为即时并进行比较吗?

  • 问题内容: 我想格式化为。我已经尝试了以下步骤。 但我低于例外。 我该怎么办? 问题答案: 在这里,这有效: 在您的第一个样式中删除多余的“ T” 第二种格式不正确,应为dd-MMM-yyyy。 看看SimpleDateFormat的Javadoc