我想将服务器UTC时间转换为本地时间,反之亦然.这是我的代码..
var isTimeFromServer = true
var time:String!
var period:String!
let timeString = "6:59 AM" //Current UTC time
if isTimeFromServer {
let index = timeString.index(timeString.startIndex, offsetBy: 5)
let twelve = timeString.substring(to: index)
var dateString:String!
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "H:mm"
let date12 = dateFormatter.date(from: twelve)!
dateFormatter.dateFormat = "h:mm a"
let date22 = dateFormatter.string(from: date12)
//print(date22)
dateString = date22
//print("dateString=\(dateString)")
time = dateString.components(separatedBy: " ")[0]
period = dateString.components(separatedBy: " ")[1]
}
else {
time = timeString.components(separatedBy: " ")[0]
period = timeString.components(separatedBy: …Run Code Online (Sandbox Code Playgroud) 假设我希望日期看起来像这样:
|1988|December|30|
Run Code Online (Sandbox Code Playgroud)
如何将这些添加到dateFormatter或者为此让格式如下:
30 in the month of December in the year of 1998
Run Code Online (Sandbox Code Playgroud)
现在是1988年,12月和30年,我想使用标准格式,但我希望我提出的文字也随之而来.
特别是在上述情况下,格式和管道只是在日期或月份的日期格式旁边,格式和管道之间没有空格.
只需设置格式就可以实现这一切吗?
我正在使用Objective C for iPhone并拥有一个NSDate,我希望以完整的风格显示但没有年份.现在我正在使用下面的代码,但它也显示了年份,我不希望这样.由于我想以正确的地区格式显示日期,我不能只删除最后一年,因为在某些国家,年份不会在最后,而是在中间或开始.
NSDate *testdate = [NSDate date];
NSDateFormatter *dateFormattertest = [[NSDateFormatter alloc] init];
[dateFormattertest setDateStyle:NSDateFormatterFullStyle];
[dateFormattertest setTimeStyle:NSDateFormatterNoStyle];
NSString *formattedDateString = [dateFormattertest stringFromDate:testdate];
NSLog(formattedDateString);
In US this give me:
Thursday, January 14, 2010
In Sweden this give me:
torsdag, 2010 januari 14
Run Code Online (Sandbox Code Playgroud)
这是什么解决方案?另一个问题,我在哪里可以找到有关如何使用NSDateFormatter的setDateFormat的信息?我无法找到有关API中不同字母的信息.
如何将以下日期"Sun Jul 17 07:48:34 +0000 2011"转换为以下格式"2011-07-17 07:48:34"?
我使用NSDateFormatter如下所示,但它没有工作.结果是null.
NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];
Run Code Online (Sandbox Code Playgroud) 我正在用Swift的Codable替换旧的JSON解析代码,并且遇到了一些麻烦.我想这不是一个可编码的问题,因为它是一个DateFormatter问题.
从结构开始
struct JustADate: Codable {
var date: Date
}
Run Code Online (Sandbox Code Playgroud)
和一个json字符串
let json = """
{ "date": "2017-06-19T18:43:19Z" }
"""
Run Code Online (Sandbox Code Playgroud)
现在让我们解码
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let data = json.data(using: .utf8)!
let justADate = try! decoder.decode(JustADate.self, from: data) //all good
Run Code Online (Sandbox Code Playgroud)
但是,如果我们更改日期以使其具有小数秒,例如:
let json = """
{ "date": "2017-06-19T18:43:19.532Z" }
"""
Run Code Online (Sandbox Code Playgroud)
现在它打破了.日期有时会以小秒数回归,有时则不会.我以前解决它的方式是在我的映射代码中我有一个转换函数,它尝试使用和不使用小数秒的dateFormats.我不太确定如何使用Codable来处理它.有什么建议?
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-YYYY HH:mm"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
Run Code Online (Sandbox Code Playgroud)
如果我选择"MM",我会得到月份的数字:"09-05-2012 15:33"如果我选择"MMMM"我会得到一个月的字:"09-May-2012 15:33"
我想要的是3个字母缩写中的月份.
例如:"1月"将是"1月"
在这种情况下,May是正确的,因为它只有3个字母.
我有来自服务器的时间戳,如下所示:
2013-04-18T08:49:58.157+0000
Run Code Online (Sandbox Code Playgroud)
我试过去掉冒号,我已经尝试了所有这些:
将ISO 8601时间戳转换为NSDate:如何处理UTC时间偏移?
为什么NSDateFormatter无法解析ISO 8601格式的日期
这是我在的地方:
+ (NSDate *)dateUsingStringFromAPI:(NSString *)dateString {
NSDateFormatter *dateFormatter;
dateFormatter = [[NSDateFormatter alloc] init];
//@"yyyy-MM-dd'T'HH:mm:ss'Z'" - doesn't work
//@"yyyy-MM-dd'T'HH:mm:ssZZZ" - doesn't work
//@"yyyy-MM-dd'T'HH:mm:sss" - doesn't work
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
// NSDateFormatter does not like ISO 8601 so strip the milliseconds and timezone
dateString = [dateString substringWithRange:NSMakeRange(0, [dateString length]-5)];
return [dateFormatter dateFromString:dateString];
}
Run Code Online (Sandbox Code Playgroud)
我最大的问题之一是,我上面的日期格式是否真的是ISO 8601?我从人们看到的所有例子都有不同的格式.有些人...157-0000,有些人最后没有任何东西.
我在跑步时遇到了撞车,它指向了dateFormmater.timezone.控制台中的错误是:
无法将'Swift.Optional'(0x1192bf4a8)类型的值转换为'NSTimeZone'(0x1192c0270).
价值rowEvents.date是"1480134638.0"
我试图从Firebase中取出一个Unix时间戳保存为字符串.将其转换为Date并再次将其保存为字符串,以便将其发布到单元格标签上.
我从StackOverflow获得了这段代码.我插入了我的数据,一切都很好,直到我运行它.我想一切都不是很好......
if let lastUpdated : String = rowEvents.date {
let epocTime = TimeInterval(lastUpdated)! / 1000 // convert it from milliseconds dividing it by 1000
let unixTimestamp = NSDate(timeIntervalSince1970: epocTime) //convert unix timestamp to Date
let dateFormatter = DateFormatter()
dateFormatter.timeZone = NSTimeZone() as TimeZone!
dateFormatter.locale = NSLocale.current // NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateFormatter.date(from: String(describing: unixTimestamp))
let updatedTimeStamp = unixTimestamp
let cellDate = DateFormatter.localizedString(from: updatedTimeStamp as Date, dateStyle: DateFormatter.Style.full, timeStyle: DateFormatter.Style.medium)
cell.subtitleLabel.text …Run Code Online (Sandbox Code Playgroud) 我想转换2015-08-14T20:02:25-04:00为2015-08-14 16:02
我在下面尝试,但它不能很好地执行(返回nil).
let d = "2015-08-14T20:02:25-04:00"
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZZ"
let date: NSDate? = formatter.dateFromString(d)
Run Code Online (Sandbox Code Playgroud)
如何转换此日期格式?
不确定是什么问题,但不是得到一个月的名字"七月",我得到"07".
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[NSLocale systemLocale]];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];
Run Code Online (Sandbox Code Playgroud)
我已经尝试了M,MM,MMM,MMMM,并且所有这些都给了我一个数字,而不是月份名称,尽管有不同数量的前导0.
nsdateformatter ×10
nsdate ×6
ios ×5
swift ×4
objective-c ×3
date ×2
iphone ×2
codable ×1
formatting ×1
iso ×1
swift4 ×1