【问题标题】:How to make an if statement using only a part of the date?如何仅使用日期的一部分进行 if 语句?
【发布时间】:2014-02-25 09:44:57
【问题描述】:

我从 API 获得交易日期戳。格式为 MM/dd/yyyy hh:mm:ss a (02/01/2014 11:41 23s AM)。

所以我想做的是根据某个日期的差异为对象所在的交易标签的文本着色。

就我而言,该特定日期是当前时间。

所以你可以在下面看到,我有一个 if 语句。但是我不希望它们变成现在的样子,因为它限制了语句的灵活性。

我的问题是针对两种情况: 1)如何制作条件语句,所以如果 transactionDate 距离当前日期 1 小时,则 datelabel.textcolor 为红色,否则为绿色。

2) 如果transactionDate不是同一天?

我无法确定如何实施这些条件。请让我知道在案例 1 和案例 2 中是如何完成的。

你可以看到我的问题,陈述太死板了,我只能做出陈述但它们太准确了,我想要更宽/更具体的边距。

现在它是如此具体,如果我的目标是让 transactionDatetime 离开一小时,将 textcolor 涂成绿色,我不能,因为日期字符串等于 2/01/2014 10:00 43s AM 之类的确切时间,或者其他任何内容不平等。

我想让任何超过 1 小时的不相等(将绿色以外的任何颜色着色)和 1 小时以下的任何相等(textcolor 绿色)。

我可以处理所有事情,只是需要帮助放宽这个时间框架。

        NSNumber *timestamp = [payment objectForKey:@"transactionDatetime"];
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];


        NSDate *date = [NSDate date];
        // format it
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
        [dateFormat setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];
        // convert it to a string
        NSString *dateString = [dateFormat stringFromDate:date];
        // free up memory
        [dateFormat release];
        //Try it
        NSLog(@"Todays date is = %@",dateString);



        if ([dateLabel.text isEqual:dateString]) {
            dateLabel.textColor = [UIColor colorWithRed:50/255.0f green:197/255.0f blue:0/255.0f alpha:1.0f];
        }
        else {
            dateLabel.textColor = [UIColor colorWithRed:68/255.0f green:140/255.0f blue:0/255.0f alpha:1.0f];
        }
        dateLabel.text = [df stringFromDate:[NSDate dateWithTimeIntervalSince1970:([timestamp floatValue]/1000)]];
        [df release];

【问题讨论】:

  • 旁注 - 为什么要创建两个格式相同的日期格式化程序?只需创建并使用其中之一。
  • 我试过没有用。会再试一次。

标签: ios if-statement nsdate


【解决方案1】:

我认为你想要使用的是 NSDateComponents。

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

因此,如果您想要工作日,您可以执行以下操作:

NSDateComponents *weekdayComponents =
[gregorian components:NSWeekdayCalendarUnit fromDate:date];
int weekday = [weekdayComponents weekday];

所以对于你的情况,抓紧时间!

【讨论】:

  • 其实我刚刚意识到我在做的很好,但唯一的问题是我没有设置松弛时间。因此,既然我说如果事务时间戳最多比当前时间早 1 小时,那么事务日期时间应该是绿色的——我必须修改我的条件。有关修改 ([dateLabel.text isEqual:dateString]) 的任何线索,以便接受介于 (dateString - 1 小时) 之间的任何内容?
  • 您是否要从字符串中减去 1?
  • 理论上至少是的。我只想修改条件,以便在 datestring 和 (datestring - one hour) 之间的任何内容都允许我形成条件。
  • 如果您打算以特定方式执行此操作,则必须使用 NSDate 或编写某种类型的字符串解析算法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2018-06-25
  • 2022-10-21
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多