7
votes

Date et heure actuelles - Nsdate

Je dois afficher la date et l'heure actuelles.

J'ai utilisé; xxx

Je veux avoir la date et l'heure actuelles (devrait afficher le temps système et pas le temps GMT). La sortie doit être dans un fichier nsdate format et non nstring .

par exemple; xxx


9 commentaires

Que veux-tu dire? [date nsdate] vous donnera l'heure actuelle. Qu'est-ce que tu veux?


Il n'y a pas de question ici. [Nsdate Date] retourne la date actuelle!


Je veux obtenir la date et l'heure actuelles. Ex: 2012 23 mai 23h50


[date nsdate] retourne la date et l'heure actuelles.


Je sais que. Mais j'en ai besoin pour retourner le temps système et pas le temps GMT.


NSDate a une période de trimestre de la propriété, vous date est GMT Time Plus System Timezone.


Dupliquer de Stackoverflow .com / questions / 10772033 / ...


@netrace: nsdate n'a pas de propriété de ce type.


Comme on l'a demandé, la question est absurde. La demande est destinée à un nsdate dans le fuseau horaire actuel du système . Il n'y a pas de tel concept; nsdate est toujours en UTC. Alors que la réponse acceptée, en quelque sorte, ce qui est demandé, ce qui le fait est une idée terrible . Ne faites jamais cela - le résultat est une entité qui prétend représenter une heure d'heure, mais représente en réalité une autre. Je ne connais pas assez bien l'IOS pour savoir si cela a depuis ajouté une classe qui porte à la fois une date d'heure et un fuseau horaire; Sinon, vous devriez vous faire votre propre et passer cela.


5 Réponses :


0
votes

Vous avez besoin d'un format NsdateFormatter et appelez StringFromdate cette méthode pour obtenir une chaîne de votre date. XXX


1 commentaires

Je ne veux pas émettre le résultat dans la chaîne. Il devrait être nsdate à la place. Et quand j'essaie de le convertir en nsdate (avec datefromstring ), il me montrera l'heure GMT et non le temps système.



9
votes

Étant donné que tout Nsdate est mentionné GMT, vous le souhaitez probablement: (N'oubliez pas que la nowdate ne sera pas la date de date actuelle du système, mais elle est "décalée", donc si vous générerez Nstring à l'aide de Nsdateformatter, vous verrez une date incorrecte)

NSDate* currentDate = [NSDate date];
NSTimeZone* currentTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* nowTimeZone = [NSTimeZone systemTimeZone];

NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:currentDate];
NSInteger nowGMTOffset = [nowTimeZone secondsFromGMTForDate:currentDate];

NSTimeInterval interval = nowGMTOffset - currentGMTOffset;
NSDate* nowDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:currentDate];


10 commentaires

Ainsi, comment peut afficher la date et l'heure actuelle (pas le temps de GMT, mais le temps système)


Si vous devez afficher, vous avez besoin de nstring. Comment affichez-vous l'objet Nsdate?


Je ne vais pas afficher, mais utilisez le nsdate pour effectuer un calcul supplémentaire de la date et de l'heure actuelles.


C'est Terrible conseils. Vous ne devriez pas être transférés manuellement des dates pour compenser les fuseaux horaires. Utilisez nsdateformatter pour afficher une date dans une zone particulière.


@Jacquescousteau Ce n'est pas un conseil, c'est ce que Sharon a besoin.


Cela me semble être une méthode tout à fait pratique pour bousiller l'ensemble de la date et de la manipulation de temps et de tous les calculs calendrier, car vous sautez à temps au lieu de changer le fuseau horaire. À long terme, ce sera la racine de nombreux problèmes - à coup sûr.


Je suis désolé, mais même si c'est ce qui a été demandé, j'ai bowvote cette réponse. Essayez de parler au questionneur de cette approche, ou du moins avertir Autres lecteurs, ils ne veulent pas faire cela. Passer autour d'une date d'heure qui n'est pas ce qu'il semble être est un design fondamentalement horrible. Une solution consiste à transmettre une classe ou une structure avec deux champs (Nsdate, NSTimezone). Si vous devez interagir avec le code hérité qui ne peut pas être adapté, alors oui, vous pourriez avoir besoin d'un convertisseur comme celui-ci. Restreindre l'utilisation du "couché" nsdate à une petite partie de votre code; Utilisez la structure "TIMZONED" ailleurs.


AVANCEZ APPUYÉE, il est très clair que Nsdate State contient une date incorrecte.


Mais s'il vous plaît, aidez-moi à avertir mieux que ce que j'ai fait.


@ToolMakersteve, avez-vous déjà modifié la réponse pour avertir mieux que ce que j'ai fait?



-1
votes

Utilisez cette méthode xxx

Cela peut vous renvoyer ce que vous voulez.

J'espère que vous pouvez vous aider.


2 commentaires

Cela me semble être une méthode tout à fait pratique pour bousiller l'ensemble de la date et de la manipulation de temps et de tous les calculs calendrier, car vous sautez à temps au lieu de changer le fuseau horaire.


Je doute que cela soit correct, car il ne semble pas y avoir de mention de l'heure du système (locale actuelle), quelle est la question de la question. (Si cela produise en quelque sorte la sortie souhaitée, comment elle est non intuitive.)



5
votes

Chaque instant dans le temps est le même moment dans le temps partout dans le monde - il est juste d'être exprimé comme des temps d'horloge différentes dans différents fuseaux horaires. Par conséquent, vous ne pouvez pas modifier la date à une autre date qui représente le temps de votre fuseau horaire; Vous devez utiliser un nsdateformatter que vous vous nourrissez avec le fuseau horaire dans lequel vous vous trouvez. La chaîne résultante est le moment à temps exprimé dans l'heure de votre position.

Tous les calculs nécessaires dans GMT et utilisent simplement un formateur pour afficher.


1 commentaires

Exactement. Dommage que personne n'a mis de commentaire sur la question initiale, demandant à OP pourquoi ils devaient faire ce qu'ils ont dit qu'ils devaient faire - depuis ce qu'ils demandaient est un design terrible Compte tenu de la définition de Nsdate comme Timezone-indépendant. Pour obtenir suffisamment d'informations pour suggérer une approche alternative - ou du moins à "contenir le dommage" (Limitez-la à une petite zone de code; transport de fuseau horaire autour d'ailleurs si nécessaire, afin que vous puissiez formater à volonté).