标签: nsdateformatter

Swift 3.0:将服务器UTC时间转换为本地时间,反之亦然

我想将服务器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)

nsdate nsdateformatter nsdatecomponents swift

32
推荐指数
4
解决办法
5万
查看次数

是否可以在NSDateFormatter的格式字符串中添加自定义文本?

假设我希望日期看起来像这样:

|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 nsdateformatter ios

31
推荐指数
2
解决办法
6917
查看次数

NSDate完整风格但没有年份

我正在使用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中不同字母的信息.

iphone nsdate nsdateformatter

30
推荐指数
3
解决办法
6451
查看次数

转换目标C中的日期格式

如何将以下日期"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)

iphone objective-c nsdate nsdateformatter ios

30
推荐指数
2
解决办法
6万
查看次数

如何使用Swift4中的Codable转换带有可选小数秒的日期字符串

我正在用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 swift dateformatter swift4 codable

30
推荐指数
2
解决办法
6430
查看次数

NSDateFormatter"Month"用3个字母代替完整单词

    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个字母.

date monthcalendar nsdate nsdateformatter ios

29
推荐指数
4
解决办法
4万
查看次数

将ISO 8601转换为NSDate

我有来自服务器的时间戳,如下所示:

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,有些人最后没有任何东西.

formatting iso objective-c nsdate nsdateformatter

29
推荐指数
2
解决办法
1万
查看次数

在Unix时间戳上使用DateFormatter

我在跑步时遇到了撞车,它指向了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)

date nsdateformatter date-formatting swift

29
推荐指数
3
解决办法
5万
查看次数

如何在swift中转换包括时区日期?

我想转换2015-08-14T20:02:25-04:002015-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)

如何转换此日期格式?

nsdateformatter ios swift

28
推荐指数
2
解决办法
2万
查看次数

NSDateFormatter未显示完整月份名称,仅显示单个数字

不确定是什么问题,但不是得到一个月的名字"七月",我得到"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.

nsdate nsdateformatter ios

27
推荐指数
3
解决办法
3万
查看次数