我正在尝试将字符串转换为日期,我希望该日期采用此格式' yyyy-MM-d HH:mm:ss'我没有如何在字符串中获取此格式我的问题是我想以上述格式获取日期而不是字符串,但是'日期'?
我正在这样做
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
注意:我希望此结果为日期而不是字符串
请给我解决方案 感谢....
答案 0 :(得分:6)
我希望以上格式获取日期不是字符串而是'日期'?
您要求使用特定格式的Date
- 就像说“我想要一个十六进制格式的int
”。 Date
不会拥有格式 - 它只是一个瞬间。它不知道日历系统或时区 - 它是仅仅自Unix时代以来的毫秒数。如果你想要一个格式化的值,那就是一个字符串。
您可能应该保持Date
不变,并在以后格式化,更接近用户界面。
答案 1 :(得分:0)
我遇到了一个期望特定格式的API(javax.xml.datatype.XMLGregorianCalendar)。就我而言,我在java 7
的帮助下解决了这个问题和
my_date.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
通过这样做,您可以使用00:00:00
获取最终结果。
答案 2 :(得分:0)
这是一个简单的方法,负责从String到Date的格式化:
` see code below:
public XMLGregorianCalendar formatToGregorianDate(String myDate) {
//actual Date format should be "dd-MMM-yy", but SimpleDateFormat accepts only this one
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
//Date is accepted only without time or zone
date = simpleDateFormat.parse(myDate.substring(0, 10));
} catch (ParseException e) {
System.out.println("Date can't be parsed to required format!");
e.printStackTrace();
}
GregorianCalendar gregorianCalendar = (GregorianCalendar) GregorianCalendar.getInstance();
gregorianCalendar.setTime(date);
XMLGregorianCalendar result = null;
try {
result = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
//date must be sent without time
result.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
} catch (DatatypeConfigurationException e) {
System.out.println("XMLGregorianCalendar can't parse the Date format!");
e.printStackTrace();
}
return result;
}`
也许你只需要根据自己的需要进行调整,我不知道你需要什么 仅供参考 - 请注意我使用的是java.util.Date。也许有更好的逻辑,但这个肯定是有效的。
希望它有所帮助。
答案 3 :(得分:0)
注意:我希望这个结果是日期而不是字符串
简短回答:这是不可能的。
详情:
java.util.Date
对象仅表示时间轴上的一个瞬间 — 自 UNIX 时代(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来毫秒数的包装器。由于它不保存任何时区信息,它的 toString
函数应用 JVM 的时区返回一个 String
格式,EEE MMM dd HH:mm:ss zzz yyyy
,从这个 毫秒值。要以不同的格式和时区获取 String
对象的 java.util.Date
表示,您需要将 SimpleDateFormat
与所需的格式和适用的时区一起使用,例如
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);
事实上,没有一个标准的日期时间类具有保存格式信息的属性。即使某些库或自定义类承诺这样做,它也违反了 Single Responsibility Principle。 Date-Time 对象应该存储有关日期、时间、时区等的信息,与格式无关。以所需格式表示日期时间对象的唯一方法是使用日期时间解析/格式化类型将其格式化为 String
:
java.time.format.DateTimeFormatter
java.text.SimpleDateFormat
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
另外,下面引用的是来自 home page of Joda-Time 的通知:
<块引用>请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310) - JDK 的核心部分,取代了该项目。
使用 java.time
(现代日期时间 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 了解有关现代 Date-Time API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。