Date类型的Mon Oct 20 00:00:00 CST 2014怎么转换格式为yyyy-MM-dd
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Date类型的Mon Oct 20 00:00:00 CST 2014怎么转换格式为yyyy-MM-dd相关的知识,希望对你有一定的参考价值。
java.text.DateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date OPEN_TIME1 = null;
OPEN_TIME1 = sdf.parse('2014-10-20');
为什么输出的OPEN_TIME1是Mon Oct 20 00:00:00 CST 2014这个格式
1、进入Eclipse的主页,直接在图示位置新建Java包。
2、这个时候采用方法一,需要通过相关的代码来编写。
3、也能采用方法二,如果没问题就添加相关的代码。
4、等切换控制台得到相关的结果以后,即可转换格式为yyyy-MM-dd了。
参考技术A Date date = new Date();SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
String s1 = sdf.format(date); //2015-02-09 format()才是格式化
Date t1 = null;
t1 = sdf.parse(s1);//Mon Feb 09 00:00:00 CST 2015 parse()的话是转成Date类型追问
但是我现在需要yyyy-MM-dd这个格式的Date类型存储到数据库,请问该怎么转换?
追答你用的什么数据库,你格式化成yyyy-MM-dd后写入数据库,虽然yyyy-MM-dd是String类型,但还是可以插入数据库Date类型的列的。
参考技术B var dad = new Date("Mon Oct 20 00:00:00 CST 2014");var times=dad.getFullYear() + '-' + (dad.getMonth() + 1) + '-' + dad.getDate() + ' ' + dad.getHours() + ':' + dad.getMinutes() + ':' + dad.getSeconds();
console.log(times);//输出结果:2018-03-30 15:99
将字符串转换为 GregorianCalendar
【中文标题】将字符串转换为 GregorianCalendar【英文标题】:Convert a string to GregorianCalendar 【发布时间】:2010-09-19 10:10:09 【问题描述】:我有一个来自电子邮件标题的字符串,例如 Date: Mon, 27 Oct 2008 08:33:29 -0700
。我需要的是一个 GregorianCalendar 的实例,它将代表同一时刻。就这么简单——我该怎么做?
对于最快的 - 这不会正常工作:
SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)
因为它将时区标准化为 UTC(或您的本地机器时间,取决于 Java 版本)。我需要的是 calendar.getTimeZone().getRawOffset() 返回-7 * milisInAnHour
。
【问题讨论】:
次要:您应该使用 Calendar.getInstance() 而不是直接实例化 GregorianCalendar。这仍然很灵活,因此当您的应用在印度(例如)运行时,您不必更改所有代码。 @Daniel:不一定。这取决于在印度运行的应用程序是否与印度人、ISO 日期格式、其他未本地化的流程或您有什么交互。 虽然我同意您应该使用 Calendar.getInstance(并且您应该使用通用类型 Calendar,而不是 GregorianCalendar)... getInstance() 仅在您的语言/国家是泰语时返回非 GregorianCalendar /泰国! 【参考方案1】:如果可以的话,我建议您查看 Joda Time 库。在核心平台提供类似功能的情况下,我通常会反对使用第三方库,但我将其作为一个例外,因为 Joda Time 的作者也在 JSR310 背后,而 Joda Time 基本上最终会滚入 Java 7。
http://joda-time.sourceforge.net/
所以无论如何,如果 Joda Time 是一个选项,像这样 应该 工作:
DateTimeFormatter formatter =
DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();
我希望这会有所帮助。
【讨论】:
如果你正在做任何远程复杂的日期和时间操作,听起来你就是这样,我也强烈推荐 Joda Time 库。它是我见过的设计和实现最好的库之一,它使日期/时间处理尽可能简单(但并不简单)。 嘿杰克,这是一个很好的答案!它只有一个错误——这是正确的行。更新,我会接受的。 DateTimeFormat.forPattern("你的模式").withOffsetParsed();【参考方案2】:对于最快的——这将无法正常工作...... 因为它将时区标准化为 UTC(或您的本地机器时间,取决于 Java 版本)。我需要的是 calendar.getTimeZone().getRawOffset() 返回 -7 * milisInAnHour。
从技术上讲,这确实有效,因为虽然它会返回一个 TimeZone 等于当前系统 TimeZone 的对象,但时间将被修改以考虑偏移量。
这段代码:
String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);
Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);
输出:
解析日期:2008 年 10 月 27 日星期一 11:33:29 EDT
这在技术上是正确的,因为我的系统时区是 EDT / UTC 减去四个小时(比你的时间早三个小时)。如果您将时间表示为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数(Date
对象如何存储它的日期/时间),那么这些日期/时间是相等的,它只是 TimeZone不一样。
您的问题确实是如何将日期/日历转换为我的时区?为此,请查看我对上一个问题How to handle calendar TimeZones using Java?的回复
【讨论】:
【参考方案3】:java.time
解决方案使用java.time
,modern date-time API:
现代日期时间 API 提供 OffsetDateTime
来表示具有时区偏移的日期时间对象。它可以转换为Instant
,它代表时间线上的一个瞬时点。 Instant
独立于任何时区,即它的时区偏移量为 +00:00
小时,在 ISO 8601 标准中指定为 Z
。
Instant#toEpochMilli
将此瞬间转换为从 1970-01-01T00:00:00Z 开始的毫秒数。可以将此值设置为GregorianCalendar
的对象,该对象将代表同一时刻。
演示:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
public class Main
public static void main(String[] args)
String strDateTime = "Mon, 27 Oct 2008 08:33:29 -0700";
OffsetDateTime odt = OffsetDateTime.parse(strDateTime, DateTimeFormatter.RFC_1123_DATE_TIME);
System.out.println(odt);
// In case you want a time zone neutral object, convert to Instant
Instant instant = odt.toInstant();
System.out.println(instant);
// Edit: If the requirement is a GregorianCalendar having the offset from
// the string — typically for an old API not yet upgraded to java.time:
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, DateTimeFormatter.RFC_1123_DATE_TIME);
GregorianCalendar gc = GregorianCalendar.from(zdt);
System.out.println("As Date: " + gc.getTime());
System.out.println("Time zone ID: " + gc.getTimeZone().getID());
System.out.println("Hour of day: " + gc.get(Calendar.HOUR_OF_DAY));
// ...
输出:
2008-10-27T08:33:29-07:00
2008-10-27T15:33:29Z
As Date: Mon Oct 27 15:33:29 GMT 2008
Time zone ID: GMT-07:00
Hour of day: 8
在GregorianCalendar
上调用getTime()
会转换为没有时区的Date
(另一个旧且容易出错的类),因此会丢失偏移量。打印时区 ID 和小时表明偏移量和时间都保存在 GregorianCalendar
中。
从 Trail: 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。
【讨论】:
这个问题的现代答案早就应该了。感谢您提供!以上是关于Date类型的Mon Oct 20 00:00:00 CST 2014怎么转换格式为yyyy-MM-dd的主要内容,如果未能解决你的问题,请参考以下文章
java中,date类型,有的显示是Mon Jul 15 14:27:02 CST 2013,有的显示是2013/7/15?