I'm wondering which is the best way to store a time into a database.
Is it better to store the time in millis as a LONG value or use the sql DATE type.
I want to store a time into the SQLite database of the android device and send it later to a server. Which is the best way in consideration of performance.
I've encountered both methods and both are valid options. Personally I would go with the sql DATE method since you have many predefined methods with reading/manipulating/writing dates in SQLite, as explained here. Storing time in millis is fine if you're willing to run extra calculations to verify the accuracy of the data later on, coming from a QA perspective.
Depends entirely what you are going to do with the time. If you are just going to display it, a text field is perfectly fine. If you are going to convert it do different formats, a long is probably the way to go.
As everyone else is saying, it all depends on what you want to do with it.
Considering your situation, I would store it in whatever format the server you are going to send it to needs.
As the saying goes, there are many ways to skin this particular cat. For example: in some instances I've taken the date and converted it to an int in the format of yyyymmdd, that way I can do simple less than/greater than/equal to comparisons without having to resort to the different time functions in SQL.
Related
here is what i'am trying to achieve, either one of the two would be ok
Get the date and time from a specific url/website like "www.mywebsite.com"
Get the date and time from my MSSQL Server
either one of the two would be ok, because all i need is to get the same time from the website/server's end, because i'am making an APP Version for the Mobile Website i'am making and i want to show a Clock or Date&Time Reminder in the App
i have no codes working as of now, i tried searching online in search engines and also in stackoverflow but i can't seem to find what i'am looking for, either i'am using the wrong words to search for it or there really isn't any way
the reason why i need the date is because i'am checking when the records inside the database was created and verifying how much time has passed since it was created, it like comparing (CreationDateTime & CurrentDateTime)
i can successfully Display how many hours have passed, i just need the CURRENT PROPER & ACCURATE DATE & TIME of the server :)
I can't help but think this is an XY problem, or at least close to it.
Your client device knows what time it is, because it stays in sync via NTP and whatever network it's attached to (and we already know you're attached to a network because otherwise, this whole thing falls apart). And it knows (or should know) what timezone it's in, so you can translate that to UTC or whatever alternative timezone you might need.
Your server(s) should also be keeping time synced via NTP, so drift between the client and server should be sub-second at worst.
IOW, the time (when corrected to UTC, which all date/time libraries I've used have a method built in to do) will almost always match between your client and server, so why bother with the complexity of "pushing" the current time from server to client?
I'm not seeing why you'd need to do this at all. Have the server tell the client when the reminder is set for, then let the client work out the rest. Anything else would be excessively chatty over the network.
To get the date in the format below, just convert todays date to a string
--07/06/2017
SELECT convert(varchar(10), getdate(), 103)
i have found an alternative answer that works 100% in getting date and time from SERVER instead of URL
SELECT GETDATE() AS CurrentDateAndTime
GETDATE()
In my app, I'd like to keep track of time away from the app, so that if the user is away for say, 2 hours, and come back, they receive 1 in game currency.
In practice I could easily do this by using a date object to get the current time in onStop, saving that date object, and comparing it to a new date object when they return.
However, I have a feeling this can easily be spoofed by change the internal date settings.
Is there a more secure way? Should I just put a cap on how many hours away you can bank up? I'd love some insight. Thanks as always.
you can try to make more secure code in the app, but the safest way is to request something from a server
if you are app is already using internet permissions consider making an HTTP request to get time.
look at this site for example
http://www.timeapi.org/
if you have backend to support your app that would be extra better
if you are not using internet permissions it might not be worth it to add it just for this, you might consider a different "offline" solution
I'm making an App based on money, and one feature (not of the main ones) needs to convert your amount of money in any currency (or at least into the most important ones) you need.
So if I had 50 Euros, and I select Pounds in the Spinner, the value should change from Euros to Pounds, etc.
Is there a code or a shortcut to implement this operation?
Otherwise, how may I code a method to do just this?
This is not exactly trivial to implement. Currency values fluctuate frequently enough that to be reasonably accurate you will not be able to just hard code values. You will need to send a request to some kind of currency tracking service's API, like this one at appspot. This will typically result in some kind of JSON package that you will have to parse.
When to do this exchange depends on your application. If you are doing something where up to the minute accuracy is very important, like a trading app, you would have to make the call when the user requests the information. Otherwise you could call something like openexchangerates.org that returns a single json with a very large set of currency values when the user opens your app, and cache those values until needed. That way you can more gracefully handle things like not being connected to the network, but the downside is you will not necessarily be as accurate.
I have an app on Android with a DataBase. This database has tables with ChangeDate columns, where I keep dates when some actions need to happen. For example, 2014-03-17..2014-05-18 and etc. The problem for me is that if I'm comparing for about 200 db records with today date on the app start , it will make my app heavier.
Is there another way or maybe a type of trigger for such things? Maybe you can advise something. Thanks in advance
Checking against 200 dates will take an instant so do not worry about the load for such a small number.
For other solutions, it depends on what those actions are. If this is just some actions to take when the app start, then the solution you suggest seems perfectly fine.
An other option may be to load your actions when loading and submit them to a ScheduledExecutorService.
Assume we have a lot of android devices that trying to submit real-time data(a time stamp and some numbers) to an django application.
What we need to do is get the mean value of those data that being submitted per second and constantly update an android device.
How can I achieve these goal?
Your best bet is to memcache the data then store it in the datastore. Your mention of "mean value of all these data per second" doesn't make much sense to me; unless you have a lot of users or are generating a battery-draining amount of data, the mean value per second will probably just be whatever data happened to be submitted that second. Also, "realtime" may have deceived you; it will take time for data to be transmitted to the server and back down to the phone. Especially on EDGE and slower data networks, it could cause a lag of a few seconds.
It may be practical to do per-minute mean calculations; to that end, I would simply do a memcache tuple of the number of values received that minute and the mean they represent. Then when you get a new value, recalculate the mean (multiply the mean by the number of values [not including the increment] and add the new value, then divide by the new number of values). Store this in memcache, and move on. It's unlikely your data will get evicted within that minute if you're using memcache wisely, and if it is evicted, you lost at most a minute of data. If that's unacceptable, back it up to the datastore.