鉴于:
DateTime.UtcNow
Run Code Online (Sandbox Code Playgroud)
如何获得符合ISO 8601格式的相同值的字符串?
请注意,ISO 8601定义了许多类似的格式.我正在寻找的具体格式是:
yyyy-MM-ddTHH:mm:ssZ
Run Code Online (Sandbox Code Playgroud) 我试图将ISO 8601格式的字符串转换为java.util.Date
.
yyyy-MM-dd'T'HH:mm:ssZ
如果与Locale(比较样本)一起使用,我发现该模式符合ISO8601标准.
但是,使用java.text.SimpleDateFormat
,我无法转换格式正确的String 2010-01-01T12:00:00+01:00
.我必须先将它转换为2010-01-01T12:00:00+0100
没有冒号的.
那么,目前的解决方案是
SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);
String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100");
System.out.println(ISO8601DATEFORMAT.parse(date));
Run Code Online (Sandbox Code Playgroud)
这显然不是那么好.我错过了什么或者有更好的解决方案吗?
回答
感谢JuanZe的评论,我发现了Joda-Time魔术,这里也有描述.
所以,解决方案是
DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00+01:00";
System.out.println(parser2.parseDateTime(jtdate));
Run Code Online (Sandbox Code Playgroud)
或者更简单地说,通过构造函数使用默认解析器:
DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;
Run Code Online (Sandbox Code Playgroud)
对我来说,这很好.
我正在以"2009-05-28T16:15:00"的格式获取日期时间字符串(我相信这是ISO 8601).一个hackish选项似乎是使用time.strptime
并将元组的前六个元素传递给datetime构造函数来解析字符串,如:
datetime.datetime(*time.strptime("2007-03-04T21:08:12", "%Y-%m-%dT%H:%M:%S")[:6])
Run Code Online (Sandbox Code Playgroud)
我无法找到一种"更清洁"的方式来做到这一点.有吗?
我有一个文件.在Python中,我想花费它的创建时间,并将其转换为ISO时间(ISO 8601)字符串, 同时保留它在东部时区(ET)中创建的事实.
如何获取文件的ctime并将其转换为指示东部时区的ISO时间字符串(并在必要时考虑夏令时)?
我有一个Date
对象.如何呈现title
以下代码段的部分?
<abbr title="2010-04-02T14:12:07">A couple days ago</abbr>
Run Code Online (Sandbox Code Playgroud)
我有另一个图书馆的"相对时间的单词"部分.
我尝试过以下方法:
function isoDate(msSinceEpoch) {
var d = new Date(msSinceEpoch);
return d.getUTCFullYear() + '-' + (d.getUTCMonth() + 1) + '-' + d.getUTCDate() + 'T' +
d.getUTCHours() + ':' + d.getUTCMinutes() + ':' + d.getUTCSeconds();
}
Run Code Online (Sandbox Code Playgroud)
但这给了我:
"2010-4-2T3:19"
Run Code Online (Sandbox Code Playgroud) 在Bash脚本中,我想以ISO 8601格式(最好是UTC)打印当前日期时间,看起来这应该像下面这样简单date -I
:
http://ss64.com/bash/date.html
但这似乎不适用于我的Mac:
$ date -I
date: illegal option -- I
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Run Code Online (Sandbox Code Playgroud)
事实上,man date
并未列出此选项.
任何人都知道这是为什么,或任何其他(简单)方式让我打印ISO 8601格式的日期?谢谢!
这篇文档moment.ISO_8601
作为格式化选项提供(来自2.7.0 - http://momentjs.com/docs/#/parsing/special-formats/),但这些都不起作用(甚至2.7.0):
var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error
Run Code Online (Sandbox Code Playgroud)
(http://jsfiddle.net/b3d6uy05/1/)
如何从moment.js获得ISO 8601?
如何使用ISO 8601和RFC 3339的格式标准生成日期时间戳?
目标是一个如下所示的字符串:
"2015-01-01T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
格式:
最佳案例:
我搜索过StackOverflow,Google,Apple等,并没有找到Swift的答案.
似乎最有前途的类NSDate
,NSDateFormatter
,NSTimeZone
.
相关问答:如何在iOS中获得ISO 8601日期?
这是迄今为止我提出的最好的:
var now = NSDate()
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
println(formatter.stringFromDate(now))
Run Code Online (Sandbox Code Playgroud) 我有一个日期字符串,我想解析它到正常日期使用java Date API,以下是我的代码:
public static void main(String[] args) {
String date="2010-10-02T12:23:23Z";
String pattern="yyyy-MM-ddThh:mm:ssZ";
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
try {
Date d=sdf.parse(date);
System.out.println(d.getYear());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我有一个例外: java.lang.IllegalArgumentException: Illegal pattern character 'T'
所以我想知道我是否必须拆分字符串并手动解析它?
顺便说一句,我试图在T的两边添加单引号字符:
String pattern="yyyy-MM-dd'T'hh:mm:ssZ";
Run Code Online (Sandbox Code Playgroud)
它也行不通.