【问题标题】:Convert Date with TimeStamp into NSString iOS将带有时间戳的日期转换为 NSString iOS
【发布时间】:2014-02-04 19:20:21
【问题描述】:

我正在尝试将我的设备当前时间转换为时区 (America/New_york)

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]];
NSDate *start = [NSDate date];

start 现在在IST 中有设备当前时间。如何将其转换为区域 'America'

我打算做以下事情

start = [dateFormatter dateFromString:<start date String>];

一天根据时间段分为 3 个部分。

Say 08:00 - 15:00 AS PHASE1
    15:00 - 17:00 AS PHASE2
    17:00 - 20:00 AS PHASE3
    20:00 - 08:00 AS TRANSITION PHASE and can be ignored.

我只是获取设备的日期并附加时间字符串以识别它处于哪个阶段。

示例:印度时间是 05-FEB-2014 01:25 AM(设备日期)

考虑将15:00 作为第一个截止点。我将“05-FEB-2014”附加到15:00 并将其消化为美国时区。这解决了我06-FEB-2014 02:30 IST(截止日期).. 所以这两天之间的差异大于一天!

我的预期结果可能是设备时间也在美国时区,并与最近的截止时间进行比较。

【问题讨论】:

  • 坚持什么?你不知道如何导出“”?
  • @HotLicks,是的..如果我在这种方法上错了,还有其他方法可以转换时间吗?
  • (NSDate(几乎)总是在内部以 UTC 表示——它不包含时区偏移量。)

标签: ios objective-c nsdate


【解决方案1】:

NSDate 没有时区。这是一个在任何地方都有效的单一时间参考。它基本上只是NSTimeInterval 的对象包装器——它存储的只是自参考日期以来的秒数。时区仅在与用户可见的字符串相互转换时适用。

您可以从日期格式化程序中获取用户可见的字符串

NSString *localizedDateString = [dateFormatter stringFromDate:start];

但是将NSDate 转换为特定时区并不是一个有意义的目标。 NSDate 上没有时区,所以不是可以应用的转换。

【讨论】:

  • 使用日期格式化程序将为您提供一个字符串,其中包含您想要的任何时区的时间。除此之外,您还需要什么?
【解决方案2】:

纽约日期:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
[dateFormatter setTimeZone:timeZone];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];

NSLog(@"Date : %@", dateString);

所有区域的日期:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];

for (NSString *name in timeZoneNames) {
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:name];
    [dateFormatter setTimeZone:timeZone];

    NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
    NSLog(@"timeZone abbreviation : %@\nName : \"%@\"\nDate : %@\n\n", [timeZone abbreviation], name, dateString);
}

【讨论】:

    【解决方案3】:

    查看日期格式化程序中的stringFromDate 方法。你传入一个NSDate,它就会转换成指定的格式。

    更新:这是设置当前时区的方法[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

    https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 2014-02-03
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多