如何获取今天的日历日期并走向

时间:2015-12-29 16:20:10

标签: ios date

我知道今天如何使用标签显示今年的月份。我使用此代码。

// show the present month
    NSDate *date = [NSDate date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat=@"MMMM";
    NSString * monthString = [[dateFormatter stringFromDate:date] capitalizedString];
    dateFormatter.dateFormat=@"yyyy";
    NSString * yearString = [[dateFormatter stringFromDate:date] capitalizedString];
    dateLabel.text = [NSString stringWithFormat:@"%@ ,%@",monthString,yearString];

以上代码将显示当月的年份。但我需要的是。我需要像下面这样做

1 .. enter image description here

所以todays date is 29th Dec它应该start with 29Dec并且应该显示下一个6 days date。当用户在tomorrow上打开时,就像说on 30th dec一样明智。我需要像下面的图像:

2 .. enter image description here

当用户在31 Dec上打开我的应用时,就像这样显示它。

3 .. enter image description here

因此,当用户打开我的应用时currrent date单独应该在first并且next 6 days date连续{/ p>}。

请帮我怎么做。我是ios的新手。你的帮助对我来说非常有用。谢谢

编辑:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize flabel;
@synthesize slabel;
@synthesize tlabel;
@synthesize folabel;
@synthesize fivlabel;
@synthesize sixlabel;
@synthesize sevenlabel;


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


    NSArray *labelArray = @[flabel, slabel, tlabel, folabel, fivlabel,sixlabel, sevenlabel ];
    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    dateFormatter.dateFormat = @"ddMMM";
    for (NSInteger i = 0; i < 7; ++i) {
        NSDate *nextDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:i toDate:today options:nil];
        UILabel *label = (UILabel *)labelArray[i];
        label.text = [dateFormatter stringFromDate:nextDate];
    }


}

4 个答案:

答案 0 :(得分:2)

此代码为今天和接下来的6天以ddMMM格式创建日期。将标签放在一个数组中,并按索引将日期分配给标签。

NSArray *labelArray = @[firstDateLabel, secondDateLabel ...   ];

NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSCalendar *calendar = [NSCalendar currentCalendar];
dateFormatter.dateFormat = @"ddMMM";
for (NSInteger i = 0; i < 7; ++i) {
  NSDate *nextDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:i toDate:today options:nil];
  UILabel *label = (UILabel *)labelArray[i];
  label.text = [dateFormatter stringFromDate:nextDate];
}

然而,它并没有考虑潜在的夏令时变化问题。应将当前日期调整到不会出现问题的安全时间。

答案 1 :(得分:1)

查看NSCalendar和有关日历计算的部分。

您需要获取当前日历。

从开始日期加载月/日/年组件。 (今日?)

将日期组件的小时值设置为12(以避免日期从夏令时变为标准时间,添加闰秒的日期等问题)

使用dateFromComponents在当天中午获取NSDate。让我们称之为noonDate。

使用&quot; dateByAddingUnit:value:toDate:options:&#39;将日期添加到中午日期:

将dateByAddingUnit:value:toDate:options:的结果输入日期格式化程序,以所需显示格式的本地化版本显示。

答案 2 :(得分:1)

你没有标记你的问题objective-c,所以我写了一个快速的代码,因为使用游乐场会更方便。

为了避免DST和类似的陷阱,我使用NSDateComponents进行计算。

代码会生成一个包含标签的数组。

import UIKit
let cal = NSCalendar.currentCalendar()
let now = NSDate()

var dates = [NSDate]()
for i in 0..<7 {
    let comps = cal.components([.Day, .Month, .Year], fromDate: now)
    comps.day += i
    dates.append(cal.dateFromComponents(comps)!)
}

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dMMM"
let labels = dates.map { (date) -> UILabel in
    let dateSting = dateFormatter.stringFromDate(date)
    let l = UILabel()
    l.backgroundColor = UIColor.whiteColor()
    l.textColor = UIColor.blackColor()
    l.text = dateSting
    l.sizeToFit()
    return l
}

答案 3 :(得分:-2)

由于您知道如何从NSDate中获取所需信息,因此您只需将该日期增加1天。

使用dateByAddingTimeInterval可以轻松完成:

// 86400 is the number of seconds in 1 day
NSDate *nextDay=[currentDay dateByAddingTimeInterval:86400];