通过NSDate检查值是否存在为字典中的键

时间:2016-01-31 07:49:08

标签: ios swift

我有这样的字典:

char[] markers = new char[list.size() * 2 - 1];
for (int i = 0; i < markers.length; i++)
    markers[i] = (i & 1 == 0 ? '?' : ',');
String sql = "select * from employee where id in (" + markers + ")";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    int idx = 1;
    for (String value : list)
        stmt.setString(idx++, value);
    try (ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            // code here
        }
    }
}

它在我的iOS待办事项应用程序中用于获取特定日期的已完成任务的数量。我只关心NSDate中的年,月和日部分,并希望能够使用这个字典获取特定日期的任务数量,我该怎么做?感谢。

1 个答案:

答案 0 :(得分:5)

您可以将其保存为字典,而不是将日期作为NSDate存储在字典中,以便比较更容易。使用以下代码将其存储为字符串

func dateFromString(date : NSDate) -> String {
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    return dateFormatter.stringFromDate(date)
}

您可以将NSDate()传递给上述函数,它将为您提供仅包含年,月和日期的字符串。要从字典中检索您的数据,请使用以下内容。

func dateFrom(year:Int, month:Int, day:Int) -> String {
    let components = NSDateComponents()
    components.year = year
    components.month = month
    components.day = day

    let gregorian = NSCalendar(identifier:NSCalendarIdentifierGregorian)
    let date = gregorian!.dateFromComponents(components)
    return dateFromString(date!)
}

您可以将年,月和日期传递给上述功能,它将以字符串格式返回相应的日期。所以你的字典操作看起来像

 dict[dateFromString(NSDate())] = 1 //for insertion or updation
 let numOfTasks = dict[dateFrom(2016, month: 1, day: 15)] //to get task for any particular day

修改

如果您想继续使用NSDate作为词典的键,那么您必须按如下方式修改上述代码。 dateFrom将返回您选择的年,月和日期的日期,时间将是一些常量值。如果您没有设置,时间将设置为当前时区的午夜。

func dateFrom(year:Int, month:Int, day:Int) -> NSDate {
    let components = NSDateComponents()
    components.year = year
    components.month = month
    components.day = day
    let gregorian = NSCalendar(identifier:NSCalendarIdentifierGregorian)
    let date = gregorian!.dateFromComponents(components)
    return date!
}

要获取当前日期,请将当前年份,日期,月份和时间的日期对象存储到某个常量值。

func getCurrentDate()->NSDate {
    let date = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components([.Day , .Month , .Year], fromDate: date)

    return dateFrom(components.year, month: components.month, day: components.day)
}

用法如下

dict[getCurrentDate()] = i //for insertion or updation
let numOfTasks = dict[dateFrom(2016, month: 1, day: 15)] //to get task for any particular day