Hur tar man reda på aktuell timme och minut?

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

Jag arbetar på ett program som ska göra olika saker beroende på vilken timme och minut som systemklockan visar. Programmet kommer att köra en loop varje sekund för att göra det. Det går bra, förutom att jag inte kan finna ett sätt att komma åt den aktuella timmen och minuten. Så här ser koden ut:

#import "ClockController.h"

@implementation ClockController

-(void)awakeFromNib
{
	NSTimer *clockTimer = [[NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(clock:) userInfo:nil repeats:YES] 
                        retain];
	if(clockTimer == nil) 
    {
        NSLog(@Faild to create NSTimer);
        [NSApp terminate:nil];
    }
}

-(void)clock:(NSTimer *)clockTimer
{
	
}

@end

Hur gör man för att ta reda på vad det är för timme och minut som systemklockan visar?

  • Medlem
  • Göteborg
  • 2006-07-15 08:31

Skapa ett NSCalendarDate object, något som nedan.

NSCalendarDate *now;
now = [NSCalendarDate calendarDate];

Ifall du vill jämföra kanske det är bra att skapa några NSCalendarDate objekt fast initiera dem med initWithString i stället för calendarDate.

(Jag är dock bara hobby programmerare så det kanske finns bättre lösningar på problemet )

Tack för hjälpen. Nu har jag aktuell timme, minut och sekund i heltalsvariabler.

#import "ClockController.h"

@implementation ClockController

-(void)awakeFromNib
{
	NSTimer *clockTimer = [[NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(clock:) userInfo:nil repeats:YES] 
                        retain];
	if(clockTimer == nil) 
    {
        NSLog(@Faild to create NSTimer);
        [NSApp terminate:nil];
    }
}

-(void)clock:(NSTimer *)clockTimer
{
	NSCalendarDate *now = [NSCalendarDate calendarDate];
	
	NSString *stringDate = [[NSString alloc] initWithString:[now descriptionWithCalendarFormat:@"%H:%M:%S"]]; 
	
	NSString *stringHour = [stringDate substringWithRange:NSMakeRange(0,2)]; 
	NSString *stringMinute = [stringDate substringWithRange:NSMakeRange(3,2)]; 
	NSString *stringSecond = [stringDate substringWithRange:NSMakeRange(6,2)]; 
	
	int hour = [stringHour intValue];
	int minute = [stringMinute intValue];
	int second = [stringSecond intValue];
	
	NSLog(@"%i:%i:%i", hour, minute, second);
}

@end
Ursprungligen av Björn Leander:

Tack för hjälpen. Nu har jag aktuell timme, minut och sekund i heltalsvariabler.

#import "ClockController.h"

@implementation ClockController

-(void)awakeFromNib
{
	NSTimer *clockTimer = [[NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(clock:) userInfo:nil repeats:YES] 
                        retain];
	if(clockTimer == nil) 
    {
        NSLog(@Faild to create NSTimer);
        [NSApp terminate:nil];
    }
}

-(void)clock:(NSTimer *)clockTimer
{
	NSCalendarDate *now = [NSCalendarDate calendarDate];
	
	NSString *stringDate = [[NSString alloc] initWithString:[now descriptionWithCalendarFormat:@"%H:%M:%S"]]; 
	
	NSString *stringHour = [stringDate substringWithRange:NSMakeRange(0,2)]; 
	NSString *stringMinute = [stringDate substringWithRange:NSMakeRange(3,2)]; 
	NSString *stringSecond = [stringDate substringWithRange:NSMakeRange(6,2)]; 
	
	int hour = [stringHour intValue];
	int minute = [stringMinute intValue];
	int second = [stringSecond intValue];
	
	NSLog(@"%i:%i:%i", hour, minute, second);
}

@end

Obs att du i ditt exempel läcker minne. På raden

NSString *stringDate = [[NSString alloc] initWithString:[now descriptionWithCalendarFormat:@"%H:%M:%S"]];

allokerar du en NSString som du inte avallokerar. Jag antar att du inte använder denna kod längre efter det kortare förslaget lite längre ned i diskussionen, men ändå.

--Tage

  • Medlem
  • Stockholm
  • 2006-07-15 11:28

<ot>Kommer man kunna få pröva på ditt program senare Björn?</ot>

Det borde väl räcka med:

-(void)clock:(NSTimer *)clockTimer
{
	NSCalendarDate *now = [NSCalendarDate calendarDate];
	
	int hour = [now hourOfDay];
	int minute = [now minuteOfHour];
	int second = [now secondOfMinute];
	
	NSLog(@"%i:%i:%i", hour, minute, second);
}
Ursprungligen av capojava:

Det borde väl räcka med:

-(void)clock:(NSTimer *)clockTimer
{
	NSCalendarDate *now = [NSCalendarDate calendarDate];
	
	int hour = [now hourOfDay];
	int minute = [now minuteOfHour];
	int second = [now secondOfMinute];
	
	NSLog(@"%i:%i:%i", hour, minute, second);
}

Ja, det räckte. Tack.

Ursprungligen av .mp3:

<ot>Kommer man kunna få pröva på ditt program senare Björn?</ot>

Visst, absolut. Jag bifogar både det kompilerade programmet och källkoden. Programmet visar vad klockan är genom att visa det binärt där ett par kryssrutor respekterar ettor och nollor. Övre raden är timmen, nedre minuten.

  • Medlem
  • Stockholm
  • 2006-07-16 10:46

Bra koncept, jag gillar idéen. Men programmets UI skulle behöva sig en tillsyn tycker jag. Även fast jag vet att det endast är version 0.1.

  • Medlem
  • Stockholm
  • 2006-07-24 23:59

Coolt!

I like!
Vänligen, Ylan

1
Bevaka tråden