Προς το περιεχόμενο

ημερομηνια συστηματος


KinigosPsixon

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα γνωρίζει κανείς πως μπορούμε να πάρουμε την ημερομηνία του συστήματος σε c++ σε AnsiString αν ειναι δυνατών και για να γίνω πιο συγκεκριμένος αυτο που θέλω να κάνω είναι να πέρνω την ημερομηνία απο τον υπολογιστή και να την συγκρίνω με μία ημερ απο μια βάση

Δημοσ.

καλησπερα γνωρίζει κανείς πως μπορούμε να πάρουμε την ημερομηνία του συστήματος σε c++ σε AnsiString αν ειναι δυνατών και για να γίνω πιο συγκεκριμένος αυτο που θέλω να κάνω είναι να πέρνω την ημερομηνία απο τον υπολογιστή και να την συγκρίνω με μία ημερ απο μια βάση

Πιθανότατα εργάζεσαι με τον C++ Builder, αν ναι, ρίξε μια ματιά εδώ.

Δημοσ.

ναι με c++ builder εργάζομαι...

σας ευχαριστω για τις απαντησης με την βοηθεια σας και λιγο ψαξιμο καταφερα να παρω τελικα την ημερομηνια του συστηματος οπως την ηθελα (σε κομματια) αλλα για να μην ανοιγω αλλο θεμα μηπως μπορει καποιος να μ πει πως μπορω να σπασω ενα AnsiString ? δλδ απο 12/09/2011 να παρω 3 substrings 12 , 09 και 2011

Δημοσ.

:P για linux scripts δεν ειναι η awk?

 

http://www.cplusplus.com/reference/clibrary/cstring/strtok/

 

κατι τέτοιο θελω μαλλον αλλα δεν το πολυ καταλαβαίνω

 

Είναι για scripts, ναι. Απλά με το που είδα strings και μέρη... μου ήρθε αυτόματα στο μυαλό... και απάντησα χωρίς να δω ότι αναφέρεσαι σε C++ :P

 

 

Δες εδώ.

Δημοσ.

η ημερομηνια που εχω ειναι σε ansistring και κατι δεν δουλευει σωστα αλλα θα το βρω ... καπου εκει ειμαι.... αυτο που θελω να κανω για να γίνω κατανοητός είναι να πέρνω μια ημερομηνια απο μία εγραφη σε μια βάση και να την συγκρίνω με την ημερομηνια του συστηματος μεχρι τωρα εχω καταφερη να περνω την μερα τον μηνα και τον χρονο του συστηματος σε 3 μεταβλλητες (ansistirng) και απο την βαση σε μια (12/11/2011 π.χ παλι σε ansistring τωρα θελω να το σπασω και αυτο σε 3 μεταβλητες

 

ολα οκ.. τα καταφερα με λιγο "μπακαλιστικο" τροπο μεν αλλα μου αρκει για τωρα αν καποιος εχει κατι καλυτερο ας κανει ενα ποστ...

 

>
       str1="17/9/2011";
       istringstream iss(str1);
       string token;
      int i=2;
       while(getline(iss, token, '/'))
       {

        str[i]=token.c_str() ;

       i++;
       }
       Edit2->Text=str[2].c_str();
       Edit3->Text=str[3].c_str();
       Edit4->Text=str[4].c_str();

Δημοσ.

Αν δεις το link που σου έδωσα στην αρχή, έχει πολλές έτοιμες συναρτήσεις για να κάνεις ότι θέλεις.

 

Π.χ. καλώντας...

 

>
time_t tnow = time( NULL );		/* διάβασμα ώρας από το σύστημα       */
struct tm *tmnow = localtime( &tnow );	/* μετατροπή της σε δομή tm           */

έχεις μέσα στη δομή tmnow τα πάντα ως ξεχωριστά πεδία...

 

 

>
struct tm {
   int tm_sec;   // Seconds after minute (from 0).
   int tm_min;   // Minutes after hour (from 0). 
   int tm_hour;  // Hours since midnight (from 0).
   int tm_mday;  // Day of month (from 1).
   int tm_mon;   // Month (from 0).
   int tm_year;  // Years since 1900 (from 0).
   int tm_wday;  // Day of week (from 0, Sunday).
   int tm_yday;  // Day of year (from 0, January 1).
   int tm_isdst; // Positive if daylight saving time zone (DST) is used, zero if DST is not used, and negative if DST status is unknown. 
};

 

 

Εδώ μια σχετική συνάρτηση που είχα φτιάξει στο παρελθόν...

 

 

>
/* --------------------------------------------------------------------------------
* Διαβάζει την ώρα από το σύστημα, την μετατρέπει σε string με Ελληνικούς χαρακτήρες
* το οποίο string το αποθηκεύει στο όρισμα s και το επιστρέφει (σε περίπτωση
* σφάλματος επιστρέφει NULL). 
* --------------------------------------------------------------------------------
*/
char *s_currenttime( char *s, const int nchars )
{
char *daynames[7] = {
	"Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
};

char *monthnames[12] = {
	"Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"
};

/* Παράδειγμα: "Παρ, 10 Ιουν 2011 | 12:00:45"	(28+1 χαρακτήρες)             */
int maxssize = 	3			/* κείμενο ημέρας: Κυρ, Δευ, ..., Σαβ */
		+ 2			/* κόμμα & κενό διάστημα              */
		+ 2			/* ημέρα (διψήφιο νούμερο)            */
		+ 1			/* κενό διάστημα                      */
		+ 4			/* κείμενο μήνα: Ιαν, ..., Ιουν, ...  */
		+ 1			/* κενό διάστημα                      */
		+ 4			/* έτος (τετραψήφιο νούμερο)          */
		+ 3			/* κενό + παύλα + κενό                */
		+ 2			/* ώρα (διψήφιο νούμερο)              */
		+ 1			/* άνω-κάτω τελεία                    */
		+ 2			/* λεπτά (διψήφιο νούμερο)            */
		+ 1			/* άνω-κάτω τελεία                    */
		+ 2			/* δευτερόλεπτα (διψήφιο νούμερο)     */
		+ 1			/* ΜΗΔΕΝΙΚΟΣ ΧΑΡΑΚΤΗΡΑΣ ΣΤΟ ΤΕΛΟΣ     */
		;
time_t tnow = time( NULL );		/* διάβασμα ώρας από το σύστημα       */
struct tm *tmnow = localtime( &tnow );	/* μετατροπή της σε δομή tm           */

if ( !s || !tmnow || nchars < maxssize )/* ελεγχοι ασφαλείας                  */
	return NULL;

memset(s, '\0', maxssize * sizeof(char) );
sprintf( s, "%s, %02d %s %d | %02d:%02d:%02d",
	daynames[ tmnow->tm_wday ],
	tmnow->tm_mday, monthnames[ tmnow->tm_mon ], tmnow->tm_year+1900,
	tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec );

return s;
}

(όπου nchars το μέγιστο πλήθος χαρακτήρων του c-string s που περνάς στη συνάρτηση)

 

Τα παραπάνω είναι με την στάνταρ βιβλιοθήκη time της C (time.h) άρα δουλεύουν και με C++. Eίναι όμως όπως καταλαβαίνεις... χειροκίνητη δουλειά, μιας και ήθελα δικό μου custom output format. Μπορείς όμως να την προσαρμόσεις πολύ εύκολα σε ότι format θέλεις.

 

Σε αυτό εδώ το link μπορείς να διαβάσεις διάφορους άλλους τρόπους: http://www.codeproject.com/KB/datetime/datetimedisc.aspx

Δημοσ.

για την ημερομηνια του συστηματος δουλεψα με το link που μου εδωσες.

αυτο το ηθελα για να διασπασω μια ημερομηνια που θα περνω απο βαση δεδομενων

σε ευχαριστω για την βοηθεια και τα χρησιμα links.

Δημοσ.

...

αυτο το ηθελα για να διασπασω μια ημερομηνια που θα περνω απο βαση δεδομενων

Α, οκ, τότε με την strtok που σου είπε κι ο timon.

 

Εδώ μπορείς να δεις 2 υλοποιήσεις για generic string tokenizer στη C++: http://oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html.

 

Κι εδώ κάτι αντίστοιχο της 1ης υλοποίησης, αλλά για C, που επίσης είχα φτιάξει στο παρελθόν...

 

 

>
// ***********************************************************
// break a string up to maxtokens tokens and store them in *tokens[]
// (uses any chars found inside delimiters as separators between tokens)
// returns the number of tokens, or 0 on failure
// ***********************************************************
int s_tokenize(char *s, char *tokens[], int maxtokens, char *delimiters)
{
register int i=0;

if ( !s || !tokens || !delimiters || maxtokens < 0 )	// sanity checks
	return 0;					// ... early exit

tokens[0] = strtok(s, delimiters);
if (tokens[0] == NULL)
	return 0;
for (i=1; i < maxtokens && (tokens[i]=strtok(NULL, delimiters)) != NULL; i++)
	; 

return i;
}

 

 

σε ευχαριστω για την βοηθεια και τα χρησιμα links.

Τίποτα ρε συ, για αυτό υπάρχουν τα φόρουμ :)

 

ΥΓ. Τα links και τους κώδικες τα δίνω σε περίπτωση που φανούν χρήσιμα και σε άλλα παιδιά.

Δημοσ.

και μια τελευταία απορία...

πως μπορω να διαβάσω μια μια τις εγραφες απο μια βαση? θελω δλδ σε μια μεταβλητη να αποθηκεύω μια εγγραφή να κάνω κάποιες ενέργειες και μετα να πηγαίνω στην επομενη εγγραφη και να αποθηκεύετε στη ίδια μεταβλητη....

κατι τέτοιο δλδ αλλα με loop καπου μαλλον

 

Form4->ADOQuery1->SQL->Clear();

Form4->ADOQuery1->SQL->Text = "SELECT εγγραφη from πινακα";

Form4->ADOQuery1->ExecSQL();

Form4->ADOQuery1->Active=True;

μεταβλητή=Form4->ADOQuery1->FieldValues["εγγραφη"] ;

μετα να κανω αυτα που είπαμε πιο πάνω και μετα να επαναλαμβάνετε η διαδικασία.

μαλλον ευκολο πρεπει να είναι αλλα τωρα εχω σκαλώσει

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...